我有一些日期格式为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
我想知道是否有更好的方法使日期对象忽略时区信息,而不将其转换为浏览器本地时间。
答案 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)
构造函数。