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

new Date(unix) returning inconsistent time zone

我在 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.

的输出

日期在 JS 中没有附加时区。它只是执行它的格式化程序(使用 toUTCString()getUTCHour() 来获得它)。对于您当地的时区,格式化程序在日期为夏季时使用夏令时。

I am in New York, so I expect them all to come out as EST, but some come out as EDT instead.

是的,在您所在区域的夏令时期间指定 date/time 的是 EDT(东部夏令时)而不是 EST(东部标准时间)。 unix 纪元值没有关联的时区,只是 toString 根据对它的 "local time" 解释生成一个字符串。如果您使用 toISOString,您将获得所有这些的 UTC 表示。