主要观点:在设置网站时遇到关于 JavaScript 中日期解析的奇怪现象,不同格式的日期字符串解析结果不同,且浏览器的日期解析行为经历了多次变化,从 2009 年到现在仍存在差异,同时介绍了 JavaScript Temporal 新的日期和时间 API 及其对日期解析的处理方式,还给出了浏览器日期解析代码示例及一些有趣的发现。
关键信息:
Date
在 JavaScript 中表示时间点,不同格式的日期字符串解析结果不同,如'2025/05/28'
和'2025-05-28'
。- 浏览器日期解析行为的演变过程,包括 Firefox、Chrome、Safari 的不同实现及 ES 标准的变化。
- JavaScript Temporal 新 API 中关于日期解析的处理,提供了
PlainDate
避免解析歧义,且解析日期字符串为时间点时必须提供时区或偏移量。 - 浏览器日期解析代码示例中存在一些有趣的现象,如对一些看似不规范的日期字符串的解析。
重要细节:
- 2009 年浏览器支持多种日期时间格式,未明确时区偏移时默认使用本地时间。
- ES5 要求支持新的标准化日期时间格式,Firefox 选择将日期格式解释为 UTC,Chrome 选择本地时间,Safari 要求所有字段都存在。
- ES5.1 规定缺失时区偏移值为 Z,Chrome 之后更新为使用 UTC,Safari 修复后也使用 UTC。
- 一个针对规范的 bug 导致 ES6 规定缺失时区偏移时解释为本地时间,Chrome 又切换回本地时间,之后又因兼容性问题改回 UTC。
- JavaScript Temporal 中的
PlainDate
可避免日期解析歧义,解析日期字符串为时间点时必须提供时区或偏移量,否则会报错。 - 浏览器日期解析代码示例中,一些看似不规范的日期字符串也能被解析,如
'it is wednesday, my dudes. 2025, April, maybe...28(?)'
被解析为 2025 年 5 月 28 日。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。