Intl.DateTimeFormat生成错误的格式

时间:2017-07-07 14:42:49

标签: javascript internationalization react-intl

在当前的Chrome,Firefox和Safari Intl.DateTimeFormat中,区域设置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错误实现的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

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

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应具有的正确格式的事实。