Node JS当前针对智利的DST规则

根据规范,使用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())


慕姐4208626
浏览 154回答 1
1回答

米琪卡哇伊

您提到的智利变更是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对象),则应该获得正确的结果。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript