new Date(Date.parse("Jul 8, 2005"));
2005年7月8日星期五00:00:00 GMT-0700(PST)
new Date(Date.parse("2005-07-08"));
Thu Jul 07 2005 17:00:00 GMT-0700(PST)
为什么第二次解析不正确?
在第5版规范发布之前,该Date.parse方法完全依赖于实现(除后者返回数字而不是a之外,其他方法new Date(string)等效)。在第5版规范中,添加了该要求以支持简化的(并且略有错误) ISO-8601(另请参见JavaScript中有效的日期时间字符串是什么?)。但是除此之外,除了必须接受任何Date#toString输出(不说那是什么)之外,对什么/ 应该接受没有任何要求。Date.parse(string)DateDate.parsenew Date(string)
Date.parse(string)DateDate.parsenew Date(string)
从ECMAScript 2017(版本8)开始,要求实现解析Date#toString和Date#toUTCString的输出,但未指定这些字符串的格式。
从ECMAScript 2019(版本9)开始,Date#toString和Date#toUTCString的格式分别指定为:
Date#toString
Date#toUTCString
我建议手动解析日期字符串,并将Date构造函数与年,月和日参数一起使用,以避免产生歧义:
// parse a date in yyyy-mm-dd format function parseDate(input) { var parts = input.split('-'); // new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]]) return new Date(parts[0], parts[1]-1, parts[2]); // Note: months are 0-based }