JavaScript 日期时区的奇怪行为



当我从这个 ISO 字符串"2016-02-01T16:00:00Z"构建日期时,我得到了周一 2月 01 2016 17:00:00 GMT+0100

由于

某些原因,js正在增加一个小时。

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

只是做

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

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

Z 是零 UTC 偏移的区域指示符

Date() 构造函数指示日期时间字符串时,将以 UTC 格式对其进行分析。
Date.prototype.toString()方法是根据您的时区设置日期格式,该时区可能与 UTC 不同。正因为如此,你会得到这个偏移量。

可以在 ISO 字符串末尾用 ±hh:mm 指示自定义时区:

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

Javascript 获取您的日期时间字符串,以指示的时区 (UTC) 解析它,然后以您当前的时区显示它。

当我运行您的代码片段时,我得到 GMT-05:00(美国东部标准时间)。

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

您需要考虑时区偏移量Date.getTimezoneOffset()才能在不同时区显示相同的日期。例如,以分钟为单位获取偏移量转换为小时并将其添加到您的时间中,或者编写函数以使用取决于时区偏移量转换日期,如下所示

相关内容

  • 没有找到相关文章

最新更新