Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calendar 日历回填问题 #6429

Open
19Qingfeng opened this issue Nov 11, 2023 · 3 comments
Open

Calendar 日历回填问题 #6429

19Qingfeng opened this issue Nov 11, 2023 · 3 comments
Labels

Comments

@19Qingfeng
Copy link
Contributor

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 19Qingfeng added the bug label Nov 11, 2023
@19Qingfeng
Copy link
Contributor Author

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

@zombieJ
Copy link
Member

zombieJ commented Nov 15, 2023

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

@19Qingfeng
Copy link
Contributor Author

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants