看起来 Safari 的 Int.DateTimeFormat 实现假设三月的第二个星期日将始终是 DST 时间截止,这是不正确的,因为在 2007 年之前它是四月的第一个星期日。当 DST 结束时,这似乎也会影响另一端。 PS:这段代码在美国东部时区(GMT-4)的印第安纳州运行
更具体地说...
- 2007 年及以后:所有日期均正确。
- 2006 年:3 月的第二个星期日和 4 月的第一个星期日之间以及 10 月的最后一个星期日和 11 月的第一个星期日之间的日期不正确。
- 2005 年及以后:对于 3 月的第二个星期日和 11 月的第一个星期日之间的所有日期都不正确。
这是一个小的 JSBin,它概述了这成为一个问题的确切日期(注意它在每个浏览器上都可以正常工作,除了 safari) 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 “如果当时使用了当前的夏令时算法,夏令时是否会生效”
- ES6 https://www.ecma-international.org/ecma-262/6.0/#sec-daylight-saving-time-adjustment “预计 ECMAScript 的实现将尽最大努力确定本地夏令时调整。注意建议实现使用 IANA 时区数据库的时区信息”
有没有人遇到过这个问题?如果是这样,您的解决方案是什么?我需要修复,但我怀疑通过在特定情况下增加一个小时来修补特定于 Safari 的错误,因为如果 Safari 修复了这个问题,那么我们的逻辑将再次被破坏。
最佳答案
这最终在 Safari 14.1 中得到修复根据@NathanQ 的评论
关于javascript - Safari 中的日期显示为使用 Intl.DateTimeFormat 和 en-US 语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56242641/