Получить имена часовых поясов, используя локали en-US - PullRequest
0 голосов
/ 02 мая 2019

При использовании 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));

1 Ответ

1 голос
/ 02 мая 2019

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

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

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

...