假设输入是完整的 ISO 8601 字符串,`new Date(string)` 在现代浏览器中是否可靠?

Is `new Date(string)` reliable in modern browsers, assuming the input is a full ISO 8601 string?

有很多关于 not 使用 new Date(string)(或 javascript 中的等效 Date.parse(string) 因为浏览器不一致)的警告。MDN has this to say:

It is not recommended to use Date.parse as until ES5, parsing of strings was entirely implementation dependent. There are still many differences in how different hosts parse date strings, therefore date strings should be manually parsed (a library can help if many different formats are to be accommodated).

然而,当您继续阅读时,大多数关于特定于实现的行为的警告似乎都是针对这些场景的:

我想知道的是,鉴于这两个假设:

我可以可靠地使用 new Date(string) 吗?

是的。 JavaScript 中可接受的日期字符串的格式是标准化的:

ECMAScript defines a string interchange format for date-times based upon a simplification of the ISO 8601 calendar date extended format. The format is as follows:

    YYYY-MM-DDTHH:mm:ss.sssZ

来自 ECMAScript current draft 在“日期时间字符串格式”部分标题下

这是 唯一 规范中解析日期字符串的标准,因此日期库的目的是在调用 new Date 之前将日期格式化为这种格式或 Date.parse。我无法评论 ISO 标准的“简化”是什么,但 post 中询问的格式与 [ECMAScript] 标准的格式相匹配。

请注意,该标准继续声明仅日期形式

YYYY
YYYY-MM
YYYY-MM-DD

被接受并且时间格式,可选地后跟一个 UTC 偏移量,

THH:mm
THH:mm:ss
THH:mm:ss.sss

可以在日期部分后面使用。

,使用ISO 8601输入到new Date是可靠的。

如您引用的文档所示,这是使用 ES5 标准化的,根据 MDN's compatibility table,Internet Exploder 8 (RIP) 是最后一个不支持它的浏览器。