1 Вопрос: Получить имена часовых поясов, используя локали en-US

вопрос создан в Thu, May 2, 2019 12:00 AM

При использовании Intl.DateTimeFormat я заметил, что короткие имена часовых поясов не устанавливаются при использовании языкового стандарта, который не имеет указанного часового пояса, например, языковой стандарт en-US не содержит информацию о часовом поясе 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 ответ                              1                         

Насколько мне известно, вам не повезло, если вы не написали свой собственный потенциально рискованный код для обработки того, что вы ищете.

Intl (и большинство JS-фреймворков, поддерживающих l10n и i18n) обычно совмещаются с CLDR. CLDR определяет правила для подобных вещей. В этом случае для en-US не существует «конкретной короткой» версии имени, поэтому оно возвращается к локализованной версии GMT.

Я рекомендую вам просто оставить это в покое и жить с этим. Любой вид хакерства для каждой локали не является хорошей идеей, так как вам, возможно, придется сделать это с несколькими локалями, а затем иметь дело с этими изменениями, когда Intl обновляется, поскольку CLDR постоянно оценивается.

    
1
2019-05-02 15: 36: 57Z
источник размещен Вот