antd 1.x datepicker 时区问题
Last updated
Was this helpful?
Last updated
Was this helpful?
Antd(1.x stable) -
底层引用了 (~5.6.2)
中使用了wrapPicker
方法和createPicker
方法
DatePicker的Date处理函数,依赖
gregorian-calendar
内置了和两个locale配置文件,内置的时间处理对象GregorianCalendar
.
antd全局以及各组件配置了不同的locale,分别处理不同的场景,但是DatePicker最底层是直接使用了gregorian-calendar
中的配置
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
的使用
locale
的配置,以en_US
为例
wrapPicker
方法默认传递一些参数给createPicker
,。同时会从antd的全局locale方法中寻找DatePicker的locale配置