2016-01-17 21 views
1

我发现在JavaScript的Date构造函数中存在奇怪的行为。它针对不同的毫秒毫秒值在不同时区下创建时间。我在纽约,所以我期望他们都出来作为EST,但一些出来作为EDT而不是。新日期(unix)返回不一致的时区

// 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不提供任何理智的实用工具来更改对象的时区,因为它会影响getHours的输出。

回答

2

我现在在纽约,所以我期待他们都以EST的形式出现,但有些出来的却是EDT。

是的,在您的区域设置中指定日光节约时间的日期/时间是EDT(Eastern Daylight Time)而不是EST(东部标准时间)。 unix时期值没有关联的时区,只是toString根据它的“本地时间”解释生成一个字符串。如果您使用的是toISOString,您会得到所有这些的UTC表示。

4

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

相关问题