案例一:
new Date(Date.parse("Jul 8, 2005"));
输出:
2005 年 7 月 8 日星期五 00:00:00 GMT-0700 (PST)
案例二:
new Date(Date.parse("2005-07-08"));
输出:
2005 年 7 月 7 日星期四 17:00:00 GMT-0700 (PST)
为什么第二次解析不正确?
最佳答案
在第 5 版规范出来之前, Date.parse
方法完全依赖于实现(new Date(string)
等价于 Date.parse(string)
,除了后者返回一个数字而不是 0x2518122311343)。在第 5 版规范中,增加了支持 simplified (and slightly incorrect) ISO-8601(另见 What are valid Date Time Strings in JavaScript?)的要求。但除此之外,没有要求 Date
/Date.parse
应该接受什么,除了他们必须接受任何 new Date(string)
输出(不说那是什么)。
从 ECMAScript 2017(第 8 版)开始,实现需要解析 Date#toString
和 Date#toString
的输出,但未指定这些字符串的格式。
从 ECMAScript 2019(第 9 版)开始, Date#toUTCString
和 Date#toString
的格式已指定为(分别):
提供另外 2 种格式,
Date#toUTCString
应该在新的实现中可靠地解析(注意支持并不普遍,不合规的实现将继续使用一段时间)。我建议手动解析日期字符串,并将 Date constructor 与年、月和日参数一起使用以避免歧义:
// parse a date in yyyy-mm-dd format
function parseDate(input) {
let 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
}
关于javascript - 为什么 Date.parse 给出不正确的结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2587345/