在使用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));
答案 0 :(得分:1)
据我所知,您没有编写自己有潜在风险的代码来处理所需内容的运气就很差。
Intl(以及大多数处理l10n和i18n的JS框架)通常都背负于CLDR。 CLDR为此类事情定义了规则。在这种情况下,对于美国英语,没有名称的“特定简短”版本,因此它会退回到本地化的GMT版本。
我建议您不理会它,并与其一起生活。任何一种基于区域设置的黑客都不是一个好主意,因为您可能必须对多个区域设置执行此操作,然后在不断评估CLDR时更新Intl时应对这些更改。