根据规范,使用Date对象时,Node JS(ES5)应该使用当前的dts规则。当前是指“暂时”,而不是特定日期。这还不完美,但目前对我来说已经足够了。目前,这些规则是错误的(由于智利的法律发生了变化)。简单探针:console.log(new Date()) Mon Apr 08 2019 12:48:08 GMT-0300 (Chile Summer Time) {}在日期的默认toString的末尾显示“(智利夏令时)”。实际上,我们不在夏令时(它已在两天前结束),并且当前偏移量应为-4,而不是-3。我尝试将Node升级到最新的稳定版本,但是没有用。我不想更改大量代码(在生产中)以使用moment.js或等效代码。有什么方法可以在现有的Node JS安装中更新DST规则?提前致谢- 编辑 -TZ环境变量为空。在Mac OSX(Mojave 10.14.4)和Red Hat(4.8.5-36)上进行了测试moment.js正确识别区域(“美国/圣地亚哥” whith moment.tz.guess())
1 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
您提到的智利变更是2018年10月发布的IANA TZ数据版本2018f的一部分。
Node通过公开tz版本process.versions.tz
。当前发布的10.15.3 LTS版本返回2018e
,这说明了为什么看不到更新。我认为这将在将来的某个日期进行更新。
节点通过ICU获取其IANA数据。有不同的方式来编译节点的ICU支持(说明system-icu
,small-icu
,full-icu
记录)在这里,它适用,如果你是自己从源代码构建节点。las,我无法找到任何直接更新Node ICU数据的机制,而无需自己构建Node。
ICU包含有关如何在不更新所有ICU的情况下更新时区数据的文档。但是,我看不到Node正在利用此功能的任何地方。
因此,当涉及更新Node的时区数据时-要么当前无法完成,要么记录不充分。抱歉,没有比这更好的答案了。
您确实说过您已经在使用moment-timezone,它独立地传送了其时区数据。如果仅使用矩函数(而不是Date
对象),则应该获得正确的结果。
添加回答
举报
0/150
提交
取消