【问题标题】:Get timezone names using en-US locale使用 en-US 语言环境获取时区名称
【发布时间】:2019-09-21 03:38:11
【问题描述】:

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

有没有办法在保持en-US 语言环境的同时显示AEST?否则,我们将不得不将 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));

【问题讨论】:

    标签: javascript datetime-format intl


    【解决方案1】:

    据我所知,如果您没有编写自己的潜在风险代码来处理您要查找的内容,您会很不走运。

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

    我建议您不要管它,然后忍受它。任何类型的按区域设置黑客都不是一个好主意,因为您可能必须对多个区域设置这样做,然后在不断评估 CLDR 时处理 Intl 更新时的这些更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 2011-06-05
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      相关资源
      最近更新 更多