Ответ 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')