当我从这个 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()
才能在不同时区显示相同的日期。例如,以分钟为单位获取偏移量转换为小时并将其添加到您的时间中,或者编写函数以使用取决于时区偏移量转换日期,如下所示