【问题标题】:JavaScript date timezone strange behaviorJavaScript日期时区奇怪的行为
【发布时间】:2016-02-26 18:36:41
【问题描述】:

当我从这个 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 date time timezone difference


【解决方案1】:

根据规范,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

【讨论】:

  • +1,但是,使用 Date 构造函数解析字符串不可靠且不推荐,手动解析字符串要好得多(库可以提供帮助,但在大多数情况下不是必需的)。
【解决方案2】:

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

当我运行您的代码 sn-p 时,我得到 GMT-05:00 (EST)。

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

【讨论】:

  • 没错,就是同一时间以不同的方式打印。这可以通过打印 date.toString() 和 date.toUTCString() 看到
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2013-06-12
    • 2017-02-15
    • 2020-05-02
    相关资源
    最近更新 更多