如何从JavaScript中的字符串中获取正确的Data对象

时间:2016-04-07 22:56:51

标签: javascript date datetime

我正在尝试使用JavaScript中的字符串创建日期对象,但我得到的日期不正确。

例如,在下面的代码中,我将字符串设置为5月17日,但我在JavaScript中获得的日期是5月16日。如何解决此问题?

>dateString
"2016-05-17"
>var newDate = new Date(dateString)
>newDate
Mon May 16 2016 17:00:00 GMT-0700 (Pacific Daylight Time)

1 个答案:

答案 0 :(得分:0)

不要使用Date构造函数或 Date.parse 来解析日期字符串。格式:

"2016-05-17"

被ISO 8601视为本地,但ECMA-262视为UTC。有些浏览器将其视为UTC,有些浏览器将其视为本地浏览器,有些浏览器根本不会将其解析。您的浏览器似乎将其视为UTC(按标准),并且您位于GMT以西的时区,因此您会看到比预期提前一天的日期。

请注意,ECMA-262会将没有时区的日期和时间字符串(例如“2016-05-17T00:00:00”)视为本地字符串。

所以总是手动解析字符串。图书馆可以提供帮助,但通常不仅仅是必需的。因此,如果您希望将“2016-05-17”解析为本地,请使用:

function parseISOLocal(s) {
  var b = s.split(/\D/);
  return new Date(b[0], b[1]-1, b[2]);
}
                  
document.write(parseISOLocal('2016-05-17'));