将UTC时间戳解析为本地时间,忽略时区

时间:2019-06-05 07:53:12

标签: javascript date timezone

我有一些日期格式为UTC。

这些日期实际上是用户当地时间在世界各地发生的事件的时间戳,而不是真正的UTC。 (由于MongoDB存储本地时间的限制,因此已经完成了此操作)

在前端,我想使用这些字段而不将其转换为本地时间。

从后端收到的日期字符串如下:

2018-10-09T18:02:25.000Z

创建日期对象会将其转换为浏览器的本地时间:

const date = new Date("2018-10-09T18:02:25.000Z")
console.log(date.getHours()) // Prints 20 since Im in +2 timezone

我希望它忽略Zulu时区信息。我可以这样删除Z:

function toDateIgnoreUTC(dateString) {
    return new Date(dateString.replace("Z", ""));
}

const date2  = toDateIgnoreUTC("2018-10-09T18:02:25.000Z")
date2.getHours() // Prints 18 which is what I want

我想知道是否有更好的方法使日期对象忽略时区信息,而不将其转换为浏览器本地时间。

1 个答案:

答案 0 :(得分:4)

我第二次deceze's concern是您要更改时间戳的含义。但是回答您问的问题:

您执行操作的方式(通过删除Z)是per specification。没有时区信息的该格式的日期/时间字符串将解析为本地时间。 但是,请注意Apple's JavaScript engine gets this wrong,它不仅会影响Safari,而且会影响所有当前的iOS浏览器(因为它们当前被迫使用Apple的JavaScript引擎,而不是他们自己的JavaScript引擎)。

要解决此问题,您始终可以自行解析(格式非常简单),并使用new Date(year, monthMinusOne, day, hours, minutes, seconds)构造函数。