3***@qq.com
3***@qq.com
  • 发布:2026-09-14 12:04
  • 更新:2026-09-14 12:05
  • 阅读:23

【报Bug】picker组件 @change 返回的日期会比所选的少一天

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: WIN10

HBuilderX类型: 正式

HBuilderX版本号: 5.15

手机系统: iOS

手机系统版本号: iOS 18

手机厂商: 苹果

手机机型: iphone 15 pro

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
<picker  
            mode="date"  
            :value="dateTime"  
            @change="changeDate($event)"  
            :style=" width: 100% "  
          >  
            {{ 日期 }}  
          </picker>

操作步骤:

picker @change 打印 e.detail.value

预期结果:

选择 2026-04-03时,返回 2026-04-03

实际结果:

选择 2026-04-03时,返回 2026-04-02

bug描述:

HBuilderX 5.15版本、 "@dcloudio/uni-app": "3.0.0-5010520260709002",
picker 组件mode=date ,在iOS系统选择日期@change返回的日期会比所选的少一天。

2026-09-14 12:04 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢您的反馈。针对您提交的 picker 组件在 iOS 端日期返回值少一天的 Bug,以下是我作为官方人员对本次反馈的评审与分析:

1. Bug 反馈内容完整性评审

  • BUG 描述:描述清晰,明确指出了组件类型(mode="date")、触发环境(iOS系统)以及具体现象(@change 返回日期比所选少一天)。
  • 代码示例:提供了核心的组件代码,但缺少 dateTime 变量的定义以及 changeDate 方法的具体实现。建议后续补充完整的 script 部分,以便官方人员直接复制运行复现。
  • 复现步骤:描述简明扼要,结合代码示例足以让评审人员理解操作流程并成功复现。
  • 预期与实际结果:预期结果合理,实际结果确实属于异常现象,排除了误报的可能。
  • 分类信息:非常完整,准确包含了 HBuilderX 版本号、@dcloudio/uni-app 依赖版本、手机系统版本、Vue 版本及设备机型等关键信息,有助于快速定位问题。
  • 附件说明:由于系统限制,我无法识别和查看附件内容,后续如有需要补充的截图或示例工程,请直接以文本代码块的形式提供。

2. Bug 是否成立及依据分析

经过核实,该 Bug 成立

在社区中已有大量开发者反馈此问题(参考:DCloud问答_219129DCloud问答_219344DCloud问答_219724)。根据现有资料,该问题主要表现为:

  • 触发条件:在 HBuilderX 5.x 版本中,使用内置 picker 组件 mode="date" 运行至 iOS 平台(App端)时发生。安卓平台和小程序平台均表现正常。
  • 底层原因:在 App 端,picker 组件日期选择默认调用的是 iOS 系统的原生日期选择控件。根据官方文档说明(picker 日期选择器),不同平台原生控件的 UI 表现与处理逻辑存在差异。在处理时区转换或时间戳格式化时,iOS 原生控件与 JS 逻辑层交互时出现了日期偏移,导致最终回调返回的值少一天。此前也有开发者反馈过在切换特定手机时区时触发类似问题(DCloud问答_165454)。

3. 替代方案与建议

由于该问题属于框架底层的兼容性缺陷,在官方彻底修复前,您可以参考以下方案规避此问题:

  1. 使用 fields 属性(推荐尝试)
    根据官方文档,当配置 fields 参数后,组件会使用统一的展示方式而非系统原生 UI。您可以尝试为 picker 组件添加 fields="day" 属性,看是否能绕过 iOS 原生控件导致的时区转换异常:

    <picker mode="date" :value="dateTime" fields="day" @change="changeDate($event)">  
     {{ 日期 }}  
    </picker>  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

  2. 使用扩展组件替代
    如果业务场景较复杂,推荐使用插件市场的 uni-datetime-picker 组件替代原生 picker。该组件支持时间戳输入和输出,且同时支持 PC 和移动端,在处理跨端日期时间选择时兼容性更好。详情请参考:uni-datetime-picker

该问题已记录在案,感谢您对 uni-app 的支持与反馈,后续官方会在版本更新中跟进处理此问题。

内容为 AI 生成,仅供参考

要回复问题请先登录注册