uni-app uni-datetime-picker设置start时选择时间确认时会报错
uni-app uni-datetime-picker设置start时选择时间确认时会报错
| 项目信息 | 详细信息 |
|---|---|
| 产品分类 | uniapp/小程序/微信 |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | win10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.76 |
| 第三方开发者工具版本号 | 3.9.11 |
| 基础库版本号 | 2.9.41 |
| 项目创建方式 | HBuilderX |
示例代码:
<uni-datetime-picker :start="Date.now()" type="daterange"></uni-datetime-picker>
操作步骤:
无
预期结果:
不报错
实际结果:
报错
bug描述:
uni-datetime-picker组件daterange下设置start时选择时间确认时会报错
更多关于uni-app uni-datetime-picker设置start时选择时间确认时会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没复现报错
更多关于uni-app uni-datetime-picker设置start时选择时间确认时会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
版本是1.5.10吗
你好 刚测试了下 确实会出现这个问题
组件内部比较时间的代码中兼容ios端代码少了类型判断
可以在组件中修改dateCompare 和 diffDate 的代码
startDate = new Date(startDate.replace(’-’, ‘/’).replace(’-’, ‘/’))
endDate = new Date(endDate.replace(’-’, ‘/’).replace(’-’, ‘/’))
修改为以下代码
if (typeof startDate === ‘string’) {
startDate = new Date(startDate.replace(’-’, ‘/’).replace(’-’, ‘/’))
}
if (typeof endDate === ‘string’) {
endDate = new Date(endDate.replace(’-’, ‘/’).replace(’-’, ‘/’))
}
或者用字符串格式化后的时间字符串也是不会报错的<uni-datetime-picker start="2025-08-11" type="daterange" />
就是升级后报错了
回复 1***@qq.com: 按上面的修改过后还会报错?
回复 爱豆豆: 应该不是这个问题,应该是字符串和数字trim报错的问题
回复 1***@qq.com: 报的什么错 我看下
回复 爱豆豆: TypeError: startDate.trim is not a function
回复 1***@qq.com: 没复现出 你这个报错 我看这个组件内没有用到trim方法啊 你可以发一个复现项目吗
回复 爱豆豆: 版本需要最新版的 里边有个公共方法dateCompare 用到了trim 会对时间戳trim 会报错
回复 1***@qq.com: 是最新的 uni-datetime-picker 2.2.40(2025-04-14)
回复 爱豆豆: 我用的是uni-ui1.5.10组件里的uni-datetime-picker,是一个东西吗?
回复 1***@qq.com: 一样的啊 https://ext.dcloud.net.cn/plugin?id=3962 uni-ui中uni-datetime-picker也是这个
回复 1***@qq.com: 你发一个复现项目 或者 把你用的uni-datetime-picker发出来
回复 爱豆豆: 下边评论有一个
回复 1***@qq.com: 复现了 npm安装的话最新包是1.5.1 但是官方插件市场的都已经更新到1.5.9了 https://ext.dcloud.net.cn/plugin?id=55&update_log 估计是老版本的bug
回复 爱豆豆: 那需要官方更新一下npm库了
回复 1***@qq.com: npm库已经更新了
回复 DCloud_UNI_JBB: 插件市场暂时还没更新
回复 DCloud_UNI_JBB: 感谢大佬
回复 1***@qq.com: 你是hx创建的项目,可以先自行修改下 function dateCompare(startDate, endDate) { startDate = new Date(fixIosDateFormat(typeof startDate === ‘string’ ? startDate.trim() : startDate)) endDate = new Date(fixIosDateFormat(typeof endDate === ‘string’ ? endDate.trim() : endDate)) return startDate <= endDate }
回复 DCloud_UNI_JBB: ok
复现demo,发现只有npm的方式会报错
这个组件升级到 2.2.41 试试还有没有报错
这是一个已知的uni-datetime-picker组件在daterange模式下的兼容性问题。当设置:start="Date.now()"时,组件内部处理时间戳格式存在异常。
解决方案:
- 使用字符串格式的时间值替代时间戳:
<uni-datetime-picker start="2024-01-01" type="daterange"></uni-datetime-picker>
- 如果需要动态设置起始时间,建议使用计算属性:
computed: {
startDate() {
return new Date().toISOString().split('T')[0]
}
}
- 或者使用moment/dayjs库格式化时间:
import dayjs from 'dayjs'
// ...
start: dayjs().format('YYYY-MM-DD')

