JavaScript 日期时区奇怪的行为

JavaScript date timezone strange behavior

当我从这个 ISO 字符串“2016-02-01T16:00:00Z”构建日期时,我得到了 Mon Feb 01 2016 17:00:00 GMT+0100

由于某些原因,js 似乎增加了一个小时。

我认为这是时区问题...但我该如何解决这个问题?

就这样

var date = new Date('2016-02-01T16:00:00Z');
alert(date);

Javascript 获取您的日期时间字符串,在指定的时区 (UTC) 中对其进行解析,然后 在您当前的时区中显示

当我 运行 你的代码片段时,我得到 GMT-05:00 (EST)。

所以它不会增加一个小时。它只是输出您当地时区的日期。

根据规范,ISO 日期字符串被解析为 UTC+0000,由末尾的 Z 字符指示。

Z is the zone designator for the zero UTC offset

当您为 Date() 构造函数指定日期时间字符串时,它会以 UTC 格式解析。
Date.prototype.toString() 方法根据您的时区格式化日期,这可能与 UTC 不同。因此你得到了这个偏移量。

可以使用 ±hh:mm:

在 ISO 字符串末尾指示自定义时区
var d = new Date('2016-02-01T16:00:00+01:00');
d.toString() // will print "Feb 01 2016 16:00:00 GMT+0100", if you're in GMT+01:00

您需要考虑 TimeZoneOffset Date.getTimezoneOffset() 以在不同时区显示相同日期。例如,将以分钟为单位的偏移量转换为小时并将其添加到您的时间中,或者编写函数以转换具有依赖时区偏移量的日期 Like