假设输入是完整的 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).
然而,当您继续阅读时,大多数关于特定于实现的行为的警告似乎都是针对这些场景的:
- 旧浏览器(例如,pre-ES5 old)
- 非 ISO 8601 输入(例如
"March 6th 2015"
)
- 不完整的 ISO 8601 输入(例如
"2015-06-03"
,没有时间或时区)
我想知道的是,鉴于这两个假设:
- 现代浏览器(例如,2020 年以后的任何浏览器)
- 完整的 ISO 8601 输入(例如
"2021-11-26T23:04:00.778Z"
)
我可以可靠地使用 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) 是最后一个不支持它的浏览器。
有很多关于 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).
然而,当您继续阅读时,大多数关于特定于实现的行为的警告似乎都是针对这些场景的:
- 旧浏览器(例如,pre-ES5 old)
- 非 ISO 8601 输入(例如
"March 6th 2015"
) - 不完整的 ISO 8601 输入(例如
"2015-06-03"
,没有时间或时区)
我想知道的是,鉴于这两个假设:
- 现代浏览器(例如,2020 年以后的任何浏览器)
- 完整的 ISO 8601 输入(例如
"2021-11-26T23:04:00.778Z"
)
我可以可靠地使用 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) 是最后一个不支持它的浏览器。