Hasty Briefsbeta

双语

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在解析日期时间字符串时要求明确指定时区或偏移量,从而避免歧义。
  • 浏览器的日期解析可能出人意料地宽松,有时甚至会将无效字符串解释为有效日期。