【问题标题】:How to convert UTC date to local date object?如何将 UTC 日期转换为本地日期对象?
【发布时间】:2017-06-06 19:10:54
【问题描述】:

我不知道为什么,但我已经尝试了互联网上所有可用的解决方案,但仍然无法成功。事件 MomentJs 无能为力。 所以,我有一个日期字符串“2017-06-05T15:00:00Z”,它来自rest api。 我什至尝试使用 moment js,但没有帮助。 注意我希望返回日期对象,因为库需要日期对象而不是本地字符串。 所以,到目前为止我试过了:

var d = new Date('2017-06-05T15:00:00Z')
console.log(d.getHours())

上面的代码打印的是 17 而不是 15!那么,我做错了什么?由于图书馆在做自己的事情时也得到 1700 小时,如日历中显示的 1700 小时而不是 1500 小时。

【问题讨论】:

  • 删除 Z...
  • @Jonasw 抱歉,它来自 rest api,除非你想让我处理字符串,但这是唯一的方法吗?

标签: javascript datetime momentjs javascript-objects


【解决方案1】:

您应该可以使用getTimezoneOffsetMethod

var d = new Date('2017-06-05T15:00:00Z')
d.setHours(d.getHours() + (d.getTimezoneOffset() / 60))
console.log(d.getHours()) // 15

【讨论】:

  • 请注意,这不适用于偏移量不是小时倍数的时区,例如 UTC+6:30
【解决方案2】:
'2017-06-05T15:00:00Z'

Z 表示祖鲁语(UTC +0:00)。所以这个时间字符串指定它不是 local 而是一个 global 时间。日期对象是本地的,所以:

new Date('2017-06-05T15:00:00Z');

返回当地的日期,当时是祖鲁的 15 点钟。因此,您目前处于 UTC+2:00 时区。

所以你需要让时间字符串成为本地的就是删除“Z”:

new Date('2017-06-05T15:00:00Z'.replace("Z",""));

或者您删除时区偏移,查看其他答案...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2022-01-11
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多