JavaScript时区偏移量与Windows偏移量不匹配

时间:2015-04-08 15:11:39

标签: javascript datetime timezone timezone-offset

我使用JavaScript遇到了一个独特的问题。运行以下代码我的系统时区UTC -5 Eastern Standard Time我的值为-4 UTC,它应该是-5 UTC

目前启用了夏令时,但JavaScript似乎并未意识到它。这里有什么问题,还有其他方法来检索正确的偏移吗?



var d = new Date();
var tz = d.toString().split("GMT")[1].split(" (")[0];
alert(tz);




我系统的时间和时区:

enter image description here

1 个答案:

答案 0 :(得分:4)

现在(2015年4月8日) EST – Eastern Standard Time(-05:00 UTC)未生效,但EDT – Eastern Daylight Time是(-04:00 UTC) 。 JavaScript Date对象返回的值是正确的。

日期和时间对话框中"(UTC-05:00)东部时间(美国和加拿大)" 的行有误导性。该行未说明当前偏移量,仅表示当DST无效时的时区偏移量。

你也可以简化你的JavaScript,不需要解析toString()的回报,实际上它被认为是不好的做法。



var offset = new Date().getTimezoneOffset();

document.write("UTC offset in minutes: " + offset 
               + ", offset in hours: " + offset / 60);





只是一些值得思考的东西。

我不是任何方式的日期和时间专家,但我通常认为将时区视为与UTC偏移不同的东西是有帮助的。

From Wikipedia

  

时区是指具有法律,商业和社交目的的统一标准时间的区域。对于密切的商业或其他通信区域来说,保持同一时间是方便的,因此时区往往遵循国家及其细分的界限。

From Wikipedia

  

UTC偏移量是指特定地点和日期的协调世界时(UTC)的小时和分钟差异。

这种区别很重要,以加拿大萨斯喀彻温省为例。

From Wikipedia

  

加拿大萨斯喀彻温省位于山区时区的地理位置。但是,该省大部分地区全年都遵守中央标准时间。因此,它实际上是全年夏令时(DST),因为时钟在秋天不会被转回一小时。

所以这里是一个同时具有多个UTC偏移的时区(山区时区)的示例。或者,如果您愿意,萨斯喀彻温省从3月到11月属于山区时区,其余时间属于中央时区。