Open 19Qingfeng opened 10 months ago
5.32.0
iOS
Chrome all version
No response
关于 <Calendar /> 日历选择组件,尝试切换时区为美国(-8)。
<Calendar />
此时,重新查看 antd 中的 <Calendar /> 组件,此时如果初始值传入 new Date('2023-11-11') 日历默认回选中 2023-11-10。
new Date('2023-11-11')
2023-11-10
MDN 传送门。
我相信大多数涉及出海的项目都会遇到这个问题。
我不确定在 antd 看来这是不是个 Bug,因为源生 new Date() 本身就存在这个问题。甚至于将 new Date('YYYY-MM-DD') 传入给 input type=month 也存在这个问题。
new Date()
new Date('YYYY-MM-DD')
input type=month
但是我觉得在 UI 组件中这部分错误应该被抹平,我思考到的解决方案:
new Date
YYYY-MM-DD hh:mm:ss
或者说有其他更好的方案来解决这个问题?如果能从一个 Date 类型反推出传入构造函数的内容当然更好,比如这样:
Date
const date = new Date('2023-11-11') // thought some method will get 2023-11-11 const origin = date.xxxx() // origin => 2023-11-11
我没有找到这样的方式,或者压根不存在这样的 Api?
我个人更加推荐第二种方式,如果可以的话我会提供 PR 修复这个 Bug。
@zombieJ @1587315093 @miracles1919 方便帮忙看下吗
Calendar 组件废弃了,不过我推测其他组件应该也有相似的问题。
好的,我可以周六周天 check 下其他组件。不过还是希望大佬帮忙一起处理这个问题的话看看哪种方法更合适
Version of antd-mobile
5.32.0
Operating system and its version
iOS
Browser and its version
Chrome all version
Sandbox to reproduce
No response
What happened?
Report
关于
<Calendar />
日历选择组件,尝试切换时区为美国(-8)。此时,重新查看 antd 中的
<Calendar />
组件,此时如果初始值传入new Date('2023-11-11')
日历默认回选中2023-11-10
。MDN 传送门。
我相信大多数涉及出海的项目都会遇到这个问题。
Ideas
我不确定在 antd 看来这是不是个 Bug,因为源生
new Date()
本身就存在这个问题。甚至于将new Date('YYYY-MM-DD')
传入给input type=month
也存在这个问题。但是我觉得在 UI 组件中这部分错误应该被抹平,我思考到的解决方案:
new Date
时传入YYYY-MM-DD hh:mm:ss
类型,这样就可以避免整个问题。new Date
类型统一进行当前时区填补,但是这需要增加一个额外的参数标识符。表示默认是会在内部补充时区的,避免外部传入YYYY-MM-DD hh:mm:ss
再次填补导致出错。或者说有其他更好的方案来解决这个问题?如果能从一个
Date
类型反推出传入构造函数的内容当然更好,比如这样:我没有找到这样的方式,或者压根不存在这样的 Api?
我个人更加推荐第二种方式,如果可以的话我会提供 PR 修复这个 Bug。
Relevant log output
No response