Подтвердить что ты не робот

Получить аббревиатуру часового пояса с использованием значения смещения

Используя moment.js(с моментом-часовым поясом), я хочу получить сокращение временной зоны (например, PST) для текущей локали.

var now = Date.now(); // 1423254073931
var zone = moment(now).zone(); // 480
var timezone = 

Как получить сокращение от часовой пояс? Все примеры, которые я видел в документах и ​​других местах, выбирают конкретный регион, например "America/New_York".

Из документов, похоже, я могу получить информацию из Объекта зоны с помощью zone.abbr(timestamp), но я не уверен, как получить доступ к объекту зоны.

JSFiddle

4b9b3361

Ответ 1

Название и вопрос разные. В заголовке вы спрашиваете, как получить его с помощью смещения - что было бы невозможно. Существует много часовых поясов, которые имеют одинаковое смещение, поэтому невозможно исключить аббревиатуру часового пояса только от смещения.

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

Общая проблема заключается в том, что не существует полностью надежного способа обнаружения текущего часового пояса. Об этом говорится в этом ответе. Таким образом, момент-часовой пояс не может детерминистически определить, какой часовой пояс должен быть загружен по умолчанию.

Есть и другие доступные варианты.

  • В некоторых браузерах расширения ECMAScript Интернационализация поддерживаются на toLocaleString объекта Date. Когда поддерживается, вы можете сделать это (без моментов):

    var d = new Date(); // or whatever date you have
    var tzName = d.toLocaleString('en', {timeZoneName:'short'}).split(' ').pop();
    

    В поддерживаемых браузерах вы получите значение типа "EST". Возможно, вы захотите сделать какие-то тесты, потому что они не будут работать во всех браузерах.

  • Вы можете использовать script как jsTimeZoneDetect, чтобы угадать локальный часовой пояс. Обычно это правильно, но не гарантировано. Затем вы можете передать это значение в момент-время.

    var tzName = jstz.determine().name();
    var m = moment();
    var abbr = m.tz(tzName).zoneAbbr();  // or .format('z')
    
  • Существует также встроенная поддержка обнаружения/угадывания часового пояса в момент-время:

    var tzName = moment.tz.guess();
    var abbr = m.tz(tzName).zoneAbbr();  // or .format('z')
    

Ответ 2

Последняя сборка moment.js даст вам временную догадку: PR # 220 например: moment.tz.guess(); will result in 'America/New_York'