使用美国语言环境获取时区名称

时间:2019-05-02 15:12:24

标签: javascript datetime-format intl

在使用Intl.DateTimeFormat时,我注意到在使用不具有指定时区的语言环境时未设置时区短名称,例如,美国语言环境不包含Australia/Sydney时区信息。

是否有一种在保持AEST语言环境的同时显示en-US的方法?否则,我们将不得不将IANA时区映射到语言环境,这似乎有些过分。

var date = new Date();
var options = {
  hour: 'numeric', minute: 'numeric', second: 'numeric', 
  timeZone: 'Australia/Sydney',
  timeZoneName: 'short'
};

// displays 12:14:27 am AEST
console.log(new Intl.DateTimeFormat('en-AU', options).format(date));

// 12:14:27 AM GMT+10
console.log(new Intl.DateTimeFormat('en-US', options).format(date));

1 个答案:

答案 0 :(得分:1)

据我所知,您没有编写自己有潜在风险的代码来处理所需内容的运气就很差。

Intl(以及大多数处理l10n和i18n的JS框架)通常都背负于CLDR。 CLDR为此类事情定义了规则。在这种情况下,对于美国英语,没有名称的“特定简短”版本,因此它会退回到本地化的GMT版本。

我建议您不理会它,并与其一起生活。任何一种基于区域设置的黑客都不是一个好主意,因为您可能必须对多个区域设置执行此操作,然后在不断评估CLDR时更新Intl时应对这些更改。