new Date(unix)返回不一致的时区

时间:2016-01-17 18:51:39

标签: javascript node.js v8

我在JavaScript的Date构造函数中发现了奇怪的行为。它为不同的unix毫秒值在不同时区创建时间。我在纽约,所以我希望它们都以EST形式出现,但有些出现在EDT

// EST as I expect:

new Date(1446613200000)
Wed Nov 04 2015 00:00:00 GMT-0500 (EST)

new Date(1446440400000)
Mon Nov 02 2015 00:00:00 GMT-0500 (EST)

// EDT for some reason:

new Date(1446354000000)
Sun Nov 01 2015 01:00:00 GMT-0400 (EDT)

new Date(1446181200000)
Fri Oct 30 2015 01:00:00 GMT-0400 (EDT)

我可以在Chrome和nodejs中重现这一点,但不能在Firefox中重现。我想这与v8有关?有人对此有解释吗?

令人遗憾的是,JS没有为更改Date对象的时区提供任何合理的实用程序,因为它会影响getHours的输出。

2 个答案:

答案 0 :(得分:4)

日期在JS中没有附加时区。这只是格式化程序的用户(使用toUTCString()getUTCHour()来获取它)。对于您当地的时区,格式化程序会在夏天使用夏令时。

答案 1 :(得分:2)

  

我在纽约,所以我希望他们都能作为美国东部时间出现,但有些人会以EDT的形式出现。

是的,在您的语言环境中指定夏令时期间的日期/时间的是EDT(东部夏令时)而不是EST(东部标准时间)。 unix epoch值没有关联的时区,只是toString根据对它的“本地时间”解释生成一个字符串。如果您使用toISOString,则会获得所有这些的UTC表示。