使用Intl.DateTimeFormat和en-US区域设置,Safari中的日期会相差一位
看起来Safari的Int.DateTimeFormat实现假设3月份的第二个星期日始终是DST时间截止时间,这是不正确的,因为在2007年之前,它是4月份的第一个星期日。当DST结束时,这似乎也会影响到另一端。PS:此代码在美国印第安纳州运行,该州位于东部时区(GMT-4)
更具体地说...
- 2007及更高版本:适用于所有日期。
- 2006:3月的第二个星期日和4月的第一个星期日以及10月的最后一个星期日和11月的第一个星期日之间的日期不正确。
- 2005及更早版本:在3月的第二个星期日和11月的第一个星期日之间的所有日期都不正确。
var formatter = new Intl.DateTimeFormat('en');
var date = new Date('6/2/2005');
console.log(formatter.format(date)); // => outputs "6/1/2005"
我进一步调查,这可能是由于ECMA规范中的这一变化。
- ES5.1https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.8"如果当时使用当前的夏令时算法,夏令时是否会生效"
- ES6https://www.ecma-international.org/ecma-262/6.0/#sec-daylight-saving-time-adjustment"ECMAScript的实施应尽最大努力确定当地夏令时调整。请注意,建议实施使用IANA时区数据库的时区信息"
还有没有人遇到过这个问题?如果是这样的话,你有什么解决方案来解决这个问题?我需要一个补丁,但我对通过在特定情况下增加一个小时来修补Safari特定的错误持怀疑态度,因为如果Safari修复了这个问题,我们的逻辑将再次被打破。
解决方案
该问题最终已在Safari 14.1Per@NathanQ的评论中修复
相关文章