Why are 2025/05/28 and 2025-05-28 different days in JavaScript?
a year ago
- #JavaScript
- #Time Zones
- #Date Parsing
- JavaScript的Date构造函数会根据日期字符串的格式不同而采用不同的解析方式。
- 格式为'YYYY/MM/DD'的日期会被解释为本地时间。
- 格式为'YYYY-MM-DD'(ISO格式)的日期会被解释为UTC时间,转换为本地时间时可能导致日期差异。
- 这一行为源于浏览器实现和ECMAScript规范的历史不一致性。
- Firefox最初将纯ISO日期格式解释为UTC时间,而缺少时区偏移量的日期时间格式则解释为本地时间。
- Chrome和Safari有各自的解析方式,导致浏览器间存在差异。
- ECMAScript规范虽逐步完善,但浏览器实现的不一致性持续了多年。
- 新的JavaScript API——Temporal旨在通过引入不带时区的纯日期类型来解决这些问题。
- Temporal在解析日期时间字符串时要求明确指定时区或偏移量,从而避免歧义。
- 浏览器的日期解析可能出人意料地宽松,有时甚至会将无效字符串解释为有效日期。