有很多关于 not 使用
new Date(string)
(或由于浏览器不一致而在 JavaScript 中等效的 Date.parse(string)
)的警告。MDN 有这样的说法:
不建议使用 Date.parse,直到 ES5,字符串的解析完全依赖于实现。不同主机解析日期字符串的方式仍然存在许多差异,因此应手动解析日期字符串(如果要容纳许多不同的格式,则库可以提供帮助)。
但是,当您继续阅读时,大多数有关特定于实现的行为的警告似乎都是针对以下场景:
"March 6th 2015"
)"2015-06-03"
,没有时间或时区)我想知道的是,考虑到这两个假设:
"2021-11-26T23:04:00.778Z"
)我可以可靠地使用
new Date(string)
吗?
是的。 JavaScript 中可接受的日期字符串的格式已标准化:
ECMAScript 基于 ISO 8601 日历日期扩展格式的简化定义了日期时间的字符串交换格式。格式如下:
YYYY-MM-DDTHH:mm:ss.sssZ
来自 ECMAScript 当前草案 在“日期时间字符串格式”部分标题下。
这是解析规范中提供的日期字符串的唯一标准,因此日期库的目标是在调用
new Date
或Date.parse
之前将日期格式化为这种格式。我无法评论 ISO 标准的“简化”是什么,但帖子中询问的格式与 [ECMAScript] 标准的格式相匹配。
请注意,该标准继续规定仅注明日期的表格
YYYY
YYYY-MM
年-月-日
被接受,并且时间格式(可选地后跟 UTC 偏移量)
THH:mm
THH:mm:ss
THH:mm:ss.sss
可以在日期部分之后使用。
是,使用 ISO 8601 输入到
new Date
是可靠的。
正如您引用的文档所示,这是通过 ES5 进行标准化的,并且根据 MDN 的兼容性表,Internet Exploder 8 (✝) 是最后一个不支持它的浏览器。