使用 Intl.DateTimeFormat 和 en-US 区域设置,Safari 中的日期显示相差一

2024-02-15

Safari 的 Int.DateTimeFormat 实现似乎假定 3 月的第二个星期日始终是 DST 时间截止点,这是不正确的,因为在 2007 年之前它是 4 月的第一个星期日。当 DST 结束时,这似乎也会影响另一端。 PS:此代码正在美国印第安纳州运行,该州位于东部时区(GMT-4)

进一步来说...

  • 2007 年及更新版本:所有日期均正确。
  • 2006 年:三月第二个星期天和四月第一个星期天之间以及十月最后一个星期日和十一月第一个星期天之间的日期不正确。
  • 2005 年及更早版本:对于 3 月的第二个星期日和 11 月的第一个星期日之间的所有日期均不正确。

这里有一个 JSBin,概述了出现问题的确切日期(请注意,除了 Safari 之外,它在每个浏览器上都可以正常工作)https://jsbin.com/mayadehowu/edit?js,输出 https://jsbin.com/mayadehowu/edit?js,output

var formatter = new Intl.DateTimeFormat('en');
var date = new Date('6/2/2005');
console.log(formatter.format(date)); // => outputs "6/1/2005"

我进一步研究,这可能是由于 ECMA 规范的这一变化所致。

  • ES5.1 https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.8 https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.8“如果当时使用当前的夏令时算法,夏令时是否会生效”
  • ES6 https://www.ecma-international.org/ecma-262/6.0/#sec-daylight- saving-time- adjustment https://www.ecma-international.org/ecma-262/6.0/#sec-daylight-saving-time-adjustment“ECMAScript 的实现预计将尽最大努力确定当地夏令时调整。注意建议实现使用 IANA 时区数据库的时区信息”

还有其他人遇到过这个问题吗?如果是这样,您有什么解决方案来解决这个问题?我需要修复,但我对在特定情况下通过添加一个小时来修补特定于 Safari 的错误持怀疑态度,因为如果 Safari 修复了此问题,那么我们的逻辑将再次被破坏。


这最终被修复在Safari 14.1 https://developer.apple.com/documentation/safari-release-notes/safari-14_1-release-notes#JavaScript-and-WebAssembly根据 @NathanQ 的评论

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Intl.DateTimeFormat 和 en-US 区域设置,Safari 中的日期显示相差一 的相关文章

随机推荐