在第5版规范发布之前,该Date.parse方法完全依赖于实现(除后者返回数字而不是a之外,其他方法new Date(string)等效)。在第5版规范中,添加了该要求以支持简化的(并且略有错误) ISO-8601(另请参见Javascript中有效的日期时间字符串是什么?)。但是除此之外,除了必须接受任何Date#toString输出(不说那是什么)之外,对什么/ 应该接受没有任何要求。
Date.parse(string)DateDate.parsenew Date(string)
从ECMAscript 2017(版本8)开始,要求实现解析Date#toString和Date#toUTCString的输出,但未指定这些字符串的格式。
从ECMAscript 2019(版本9)开始,
Date#toString和
Date#toUTCString的格式分别指定为:
- ddd MMM DD YYYY HH:mm:ss ZZ [(时区名称)]
- 例如Tue Jul 10 2018 18:39:58 GMT + 0530(IST)
- ddd,DD MMM YYYY HH:mm:ss Z
例如 2019年7月10日星期二13:09:58 GMT
提供了Date.parse应该在新的实现中可靠地解析的另外2种格式(请注意,支持并不普遍,并且不兼容的实现将在一段时间内继续使用)。
我建议手动解析日期字符串,并将Date构造函数与年,月和日参数一起使用,以避免产生歧义:
// parse a date in yyyy-mm-dd formatfunction 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}


