在当前的Chrome浏览器中,区域设置Intl.DateTimeFormat(瑞士的意大利语部分)的Firefox和Safari it-CH错误:

new window.Intl.DateTimeFormat('it-CH').format(new Date()) // -> "6/7/2017"
new window.Intl.DateTimeFormat('fr-CH').format(new Date()) // -> "06.07.2017"
new window.Intl.DateTimeFormat('de-CH').format(new Date()) // -> "06.07.2017"

第一行的输出错误。在瑞士各地,格式应为“dd.mm.yyyy”

有趣的是,IE11和Edge可以为上述代码段提供正确的输出。

在给定的浏览器中修复/修补/覆盖window.Intl的错误实现的最佳方法是什么?

最佳答案

不确定最好但是最简单的应该是这样的:

var nativeDateTimeFormat = window.Intl.DateTimeFormat;
window.Intl.DateTimeFormat = function(locale) {
  var native = nativeDateTimeFormat(locale);
  if (locale === 'it-CH') {
    native.format = function() {
      return nativeDateTimeFormat('fr-CH').format();
    }
  }
  return native;
}

该解决方案利用了fr-CH具有it-CH应该具有的正确格式的事实。

09-25 19:54