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

25 回复

没复现报错

更多关于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()"时,组件内部处理时间戳格式存在异常。

解决方案:

  1. 使用字符串格式的时间值替代时间戳:
<uni-datetime-picker start="2024-01-01" type="daterange"></uni-datetime-picker>
  1. 如果需要动态设置起始时间,建议使用计算属性:
computed: {
  startDate() {
    return new Date().toISOString().split('T')[0]
  }
}
  1. 或者使用moment/dayjs库格式化时间:
import dayjs from 'dayjs'
// ...
start: dayjs().format('YYYY-MM-DD')
回到顶部