ant-design / ant-design-mobile

Essential UI blocks for building mobile web apps.
https://mobile.ant.design
MIT License
11.61k stars 2.39k forks source link

Calendar 日历回填问题 #6429

Open 19Qingfeng opened 10 months ago

19Qingfeng commented 10 months ago

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

image

MDN 传送门

我相信大多数涉及出海的项目都会遇到这个问题。

Ideas

我不确定在 antd 看来这是不是个 Bug,因为源生 new Date() 本身就存在这个问题。甚至于将 new Date('YYYY-MM-DD') 传入给 input type=month 也存在这个问题。

但是我觉得在 UI 组件中这部分错误应该被抹平,我思考到的解决方案:

  1. 强制用户 new Date 时传入 YYYY-MM-DD hh:mm:ss 类型,这样就可以避免整个问题。
  2. 内部对于传入的 new Date 类型统一进行当前时区填补,但是这需要增加一个额外的参数标识符。表示默认是会在内部补充时区的,避免外部传入 YYYY-MM-DD hh:mm:ss 再次填补导致出错。

或者说有其他更好的方案来解决这个问题?如果能从一个 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。

Relevant log output

No response

19Qingfeng commented 9 months ago

@zombieJ @1587315093 @miracles1919 方便帮忙看下吗

zombieJ commented 9 months ago

Calendar 组件废弃了,不过我推测其他组件应该也有相似的问题。

19Qingfeng commented 9 months ago

Calendar 组件废弃了,不过我推测其他组件应该也有相似的问题。

好的,我可以周六周天 check 下其他组件。不过还是希望大佬帮忙一起处理这个问题的话看看哪种方法更合适