Javascript,日期.不带时区的解析

Javascript, Date.parse with no timezone

本文关键字:时区 日期 Javascript      更新时间:2023-09-26

我有一个Javascript日期的问题。

我收到一个包含日期的JSON,当我试图获得date对象时,它会在不同的时区返回值,并且通常会将日期移动到前一天的20小时。

的例子:

json中的值为:"2014-06-01T00:00:00"

当我做

var d2 = new Date(Date.parse("2014-06-01T00:00:00"))
返回

2014年5月31日星期六20:00:00 GMT-0400(东部夏令时)

When I expected

Sun Jun 01 2014 00:00:00 GMT-0400

如何解决这个问题?

谢谢

Date.parse返回UTC中epoch以来的毫秒数,因此无论传入什么日期/时间字符串,都将得到UTC。(详见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse)

如果要将其转换为本地时间,则必须知道与UTC的偏移量。你可以这样从JavaScript中获取:

var offset = new Date().getTimezoneOffset()*60*1000;

(Date.prototype.getTimezoneOffset以分钟为单位返回偏移量,因此我们必须转换为毫秒。)

那么你可以用偏移量构造你的日期:

var date = new Date(Date.parse("2014-06-01T00:00:00") + offset);

如果您想将该日期解释为位于不同的时区,则只需使用适合该时区的任何毫秒偏移量。不过,请记住夏令时:这肯定会使事情复杂化。

来自Date.parse的Mozilla文档:

ECMAScript 5 ISO-8601格式支持

日期/时间字符串也可以采用ISO 8601格式。例如"2011-10-10";(只是日期)或者"2011-10-10t14:48:00";(日期和时间)可以传递和解析。UTC时区用于解释ISO 8601格式中不包含时区信息的参数。

您的值不包括时区信息,因此它被假定为UTC。问题当天的午夜UTC是您当地时区的晚上8点。注意,Date对象本身没有时区的概念—它只是从Unix纪元开始的毫秒数。当您将其转换为带有toString的字符串时,使用浏览器的本地时区。您可以使用toUTCString将其转换为使用UTC的文本表示(因此在这种情况下,您将以开始时的UTC午夜结束)。

现在你可以做些什么来"修复";这个问题……首先,你需要理解你想要表达的价值,以及你想用它做什么。如果没有更多的信息,我们无法真正帮助你。