我在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
的输出。
答案 0 :(得分:4)
日期在JS中没有附加时区。这只是格式化程序的用户(使用toUTCString()
或getUTCHour()
来获取它)。对于您当地的时区,格式化程序会在夏天使用夏令时。
答案 1 :(得分:2)
我在纽约,所以我希望他们都能作为美国东部时间出现,但有些人会以EDT的形式出现。
是的,在您的语言环境中指定夏令时期间的日期/时间的是EDT(东部夏令时)而不是EST(东部标准时间)。 unix epoch值没有关联的时区,只是toString
根据对它的“本地时间”解释生成一个字符串。如果您使用toISOString
,则会获得所有这些的UTC表示。