节点JS当前的DST规则

问题描述 投票:4回答:1

根据规范,Node JS(ES5)在使用Date对象时应该使用当前的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正确识别区域(“America / Santiago”whith moment.tz.guess())

javascript node.js date utc dst
1个回答
2
投票

你提到的智利的变化是2018年10月发布的IANA TZ data version 2018f的一部分。

Node通过process.versions.tz公开tz版本。目前发货的10.15.3 LTS版本返回2018e,这解释了为什么你没有看到更新。我假设这将在未来某个日期更新。

Node通过ICU获取其IANA数据。有关编译Node的ICU支持的不同方法的说明(system-icusmall-icufull-icu)记录了here,如果您自己从源代码构建Node,则适用。唉,我找不到任何直接更新Node的ICU数据的机制,而无需自己构建Node。

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

因此,当涉及到更新Node的时区数据时 - 要么当前无法完成,要么记录得很少。对不起,我没有比你更好的答案。

您确实说过您正在使用时刻时区,它独立地发布时区数据。如果你只使用矩函数(而不是Date对象),那么你应该得到正确的结果。

© www.soinside.com 2019 - 2024. All rights reserved.