在 JavaScript 中,`2025/05/28`和`2025-05-28`是不同的日期表示形式,主要原因在于 JavaScript 对于日期字符串的解析方式。 `/`分隔符通常被视为月和日的分隔符,而`-`分隔符通常被视为年、月和日的分隔符。 例

主要观点:在设置网站时遇到关于 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 日。
阅读 18
0 条评论