Node JS当前DST规则

Jot*_*ota 6 javascript date utc dst node.js

根据规范,使用Date对象时,Node JS(ES5)应该使用当前的dts规则。当前是指“暂时”,而不是特定日期。这还不完美,但目前对我来说已经足够了。

目前,这些规则是错误的(由于智利的法律变更)。

简单探针:

console.log(new Date()) 
Mon Apr 08 2019 12:48:08 GMT-0300 (Chile Summer Time) {}
Run Code Online (Sandbox Code Playgroud)

在日期的默认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())

Mat*_*int 5

您提到的智利变更是2018年10月发布的IANA TZ数据版本2018f的一部分。

Node通过公开tz版本process.versions.tz。当前发布的10.15.3 LTS版本返回2018e,这说明了为什么看不到更新。我认为这将在将来的某个日期进行更新。

节点通过ICU获取其IANA数据。有不同的方式来编译节点的ICU支持(说明system-icusmall-icufull-icu记录)在这里,它适用,如果你是自己从源代码构建节点。las,我找不到自己直接构建Node的任何机制来直接更新Node的ICU数据。

ICU包含有关如何在不更新所有ICU的情况下更新时区数据的文档。但是,我看不到Node正在利用此功能的任何地方。

因此,当涉及更新Node的时区数据时-要么当前无法完成,要么记录不充分。抱歉,没有比这更好的答案了。

您确实说过您已经在使用moment-timezone,它独立地传送了其时区数据。如果仅使用矩函数(而不是Date对象),则应该获得正确的结果。