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

问题描述 投票:0回答:2

有很多关于 not 使用

new Date(string)
(或由于浏览器不一致而在 JavaScript 中等效的
Date.parse(string)
)的警告。MDN 有这样的说法

不建议使用 Date.parse,直到 ES5,字符串的解析完全依赖于实现。不同主机解析日期字符串的方式仍然存在许多差异,因此应手动解析日期字符串(如果要容纳许多不同的格式,则库可以提供帮助)。

但是,当您继续阅读时,大多数有关特定于实现的行为的警告似乎都是针对以下场景:

  • 旧浏览器(例如,ES5 之前的旧浏览器)
  • 非 ISO 8601 输入(例如
    "March 6th 2015"
  • 不完整的 ISO 8601 输入(例如
    "2015-06-03"
    ,没有时间或时区)

我想知道的是,考虑到这两个假设:

  • 现代浏览器(比如 2020 年以后的任何浏览器)
  • 完整的 ISO 8601 输入(例如
    "2021-11-26T23:04:00.778Z"

我可以可靠地使用

new Date(string)
吗?

javascript date cross-browser
2个回答
2
投票

是的。 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

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


1
投票

,使用 ISO 8601 输入到

new Date
是可靠的。

正如您引用的文档所示,这是通过 ES5 进行标准化的,并且根据 MDN 的兼容性表,Internet Exploder 8 (✝) 是最后一个不支持它的浏览器。

© www.soinside.com 2019 - 2024. All rights reserved.