Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Safari中的日期使用带en US语言环境的Intl.DateTimeFormat按一个显示_Javascript_Date_Safari_Datetime Format_Dst - Fatal编程技术网

Javascript Safari中的日期使用带en US语言环境的Intl.DateTimeFormat按一个显示

Javascript Safari中的日期使用带en US语言环境的Intl.DateTimeFormat按一个显示,javascript,date,safari,datetime-format,dst,Javascript,Date,Safari,Datetime Format,Dst,看起来Safari对Int.DateTimeFormat的实现假设3月的第二个星期日始终是DST时间截止,这是不正确的,因为在2007年之前,它是4月的第一个星期日。DST结束时,这似乎也会影响另一端。注:此代码正在美国印第安纳州东部时区(GMT-4)运行 更具体地说 2007及更新版本:适用于所有日期 2006年:3月第二个星期日和4月第一个星期日之间以及10月最后一个星期日和11月第一个星期日之间的日期不正确 2005年及以上:3月第二个星期日和11月第一个星期日之间的所有日期都不正确

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

更具体地说

  • 2007及更新版本:适用于所有日期
  • 2006年:3月第二个星期日和4月第一个星期日之间以及10月最后一个星期日和11月第一个星期日之间的日期不正确
  • 2005年及以上:3月第二个星期日和11月第一个星期日之间的所有日期都不正确
这里有一个小JSBin,它概括了问题出现的确切日期(请注意,除了safari之外,它在每个浏览器上都能正常工作)

我进一步挖掘,这可能是由于ECMA规范的这种变化

  • ES5.1“如果当时使用了当前的夏令时算法,夏令时是否有效”
  • ES6“ECMAScript的实现应尽最大努力确定本地夏令时调整。注意,建议实现使用IANA时区数据库的时区信息”

还有其他人遇到过这个问题吗?如果是这样,你有什么解决办法?我需要一个修复程序,但我对在特定情况下增加一个小时来修补safari特定的bug持怀疑态度,因为如果safari修复了这个问题,那么我们的逻辑将再次被破坏。

规范的部分涉及到整个实现,它们并不意味着当不同的规范由不同的实现生效时,日期将被区别对待。也就是说,他们应该以一种方式或另一种方式行事,而不是两者兼而有之。PS
newdate('6/2/2005')
是一种不太理想的创建日期的方法。使用
新日期(2005年5月2日)
要好得多。您应该包括主机系统使用的地理位置以及适用时区中使用的夏时制规则。我理解您关于规范的观点。我可能错了,但我提出这个问题是因为Safari实际上可能有不同的内部规范实现。例如,Safari中的新日期(2005年5月7日)正确显示为2005年6月7日星期二00:00:00 GMT-0400(EDT),但在我的位置(en-US)调用该日期的Intl.DateTimeFormat格式返回
6/2005
,这告诉我日期解析和Intl格式设置程序采用不同的实现。关于日期创建的好处是,在制作快速演示示例时,我有时会忘记区域设置。您找到解决此问题的好方法了吗?我遇到了完全相同的问题。我的应用程序使用了很多历史日期,而Safari(只有Safari)中的Intl.DateTimeFormat在某些日期会出错——比如1850年9月1日<代码>新日期(1850,9,1)正确,但
新的国际日期时间格式().format(新日期(1850,9,1))
返回1850年8月31日。也很有趣。。。Chrome/Firefox与Safari在这个日期显示了不同的UTC偏移量,因此可能不仅仅是格式问题。我在打开这个so主题的同时,与苹果公司一起打开了Safari错误通知单,他们除了自动响应之外没有任何实际响应。。。不,我目前没有解决办法。我曾考虑通过检测案例和调整safari中的日期来破解它,但这意味着如果苹果碰巧修复了这个bug,它就会崩溃。关于这一点,有一个类似的线索,我刚刚发现规范的各个部分与整个实现相关,它们并不意味着当不同的规范由单个实现生效时,日期将被区别对待。也就是说,他们应该以一种方式或另一种方式行事,而不是两者兼而有之。PS
newdate('6/2/2005')
是一种不太理想的创建日期的方法。使用
新日期(2005年5月2日)
要好得多。您应该包括主机系统使用的地理位置以及适用时区中使用的夏时制规则。我理解您关于规范的观点。我可能错了,但我提出这个问题是因为Safari实际上可能有不同的内部规范实现。例如,Safari中的新日期(2005年5月7日)正确显示为2005年6月7日星期二00:00:00 GMT-0400(EDT),但在我的位置(en-US)调用该日期的Intl.DateTimeFormat格式返回
6/2005
,这告诉我日期解析和Intl格式设置程序采用不同的实现。关于日期创建的好处是,在制作快速演示示例时,我有时会忘记区域设置。您找到解决此问题的好方法了吗?我遇到了完全相同的问题。我的应用程序使用了很多历史日期,而Safari(只有Safari)中的Intl.DateTimeFormat在某些日期会出错——比如1850年9月1日<代码>新日期(1850,9,1)正确,但
新的国际日期时间格式().format(新日期(1850,9,1))
返回1850年8月31日。也很有趣。。。Chrome/Firefox与Safari在这个日期显示了不同的UTC偏移量,因此可能不仅仅是格式问题。我在打开这个so主题的同时,与苹果公司一起打开了Safari错误通知单,他们除了自动响应之外没有任何实际响应。。。不,我目前没有解决办法。我曾考虑通过检测案例和调整safari中的日期来破解它,但这意味着如果苹果碰巧修复了这个bug,它就会崩溃。我刚刚发现了一条类似的线索
var formatter = new Intl.DateTimeFormat('en');
var date = new Date('6/2/2005');
console.log(formatter.format(date)); // => outputs "6/1/2005"