我正在尝试使用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)
答案 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'));