antd 1.x datepicker 时区问题
Antd(1.x stable) - DatePicker
依赖关系
底层引用了 rc-calender(~5.6.2)
封装过程中使用了
wrapPicker
方法和createPicker
方法DatePicker的Date处理函数,依赖gregorian-calendar(4.1.0)
代码逻辑分析
wrapPicker
方法默认传递一些参数给createPicker
,默认传入zh_CN。同时会从antd的全局locale方法中寻找DatePicker的locale配置createPicker
将props传入的locale
,传递给GregorianCalendar
对象生成基本的locale信息rc-calender根据locale信息进行组件渲染
核心问题
1.x 的antd datepick在使用时,不根据用户的
new Date().timezoneOffset
设置日期,而是根据默认的local配置进行设置。分析过程见上述“代码逻辑分析”外层的antd的LocaleProvider包装组件会修改全局的locale,因此双语切换时,会存在用户的datepicker组件时区被改写的问题
解决方案
wrapPicker
方法中会从全局的antLocale.DatePicker
locale配置,将此处的timezoneOffset覆写即可
深入LocaleProvider的配置
LocaleProvider
的使用
locale
的配置,以en_US
为例
Last updated
Was this helpful?