Отображать аббревиатуру локальной зоны пользователей

Я пытался использовать формат z или zz для отображения часового пояса в конце строки и обнаружил, что он устарел. Z и ZZ работают для отображения -0700, но вместо этого я хочу, чтобы отображалось PDT.

У меня есть moment-timezone и файл данных, но я не могу понять, как с его помощью определить локальный часовой пояс клиента и отобразить что-то вроде:

2014-05-30T22:56:23.967 PDT

вместо:

2014-05-30T22:56:23.967

Можно ли использовать moment-timezone для определения EST, CST, MST, PST и т. д.?


person HypeXR    schedule 12.06.2014    source источник
comment
Мое понимание (очень минимальное) документации заключается в том, что она используется для установка часового пояса выходной строки, а не форматирование строки, например. m.tz("America/Toronto").format(); // "2013-11-18T11:55:00-05:00". Существует ряд утилиты, которые пытаются угадать часовой пояс пользователя на основе смещения часового пояса и перехода на летнее время. наблюдается. Однако они, кажется, работают с использованием значений часового пояса IANA, а не гражданского (неоднозначные) значения, такие как EST.   -  person RobG    schedule 12.06.2014


Ответы (5)


Начиная с moment-timezone 0.1.0, вы можете использовать добавления форматирования, чтобы получить аббревиатуру определенного часового пояса:

moment().tz("America/Los_Angeles").format('z');  // PST or PDT

Начиная с версии 0.5.0, теперь вы можете угадывать локальные часовой пояс, который в сочетании с описанным выше методом позволяет вам сделать следующее:

moment().tz(moment.tz.guess()).format('z');

Предполагая, что предположение было верным, оно отобразит соответствующую аббревиатуру.

person Matt Johnson-Pint    schedule 03.07.2014
comment
'z' и 'zz' теперь обесцениваются. как нам получить часовой пояс в коротком формате - person mperle; 11.07.2017
comment
@mperle - вы все равно можете их использовать, но только с часовым поясом момента. - person Matt Johnson-Pint; 11.07.2017
comment
как получить часовой пояс, используя аббревиатуру. как var mTimeZone = moment.tz(IST); вместо var mTimeZone = moment.tz(Азия/Калькутта); - person PK-1825; 07.02.2019
comment
@ PK-1825 - это предполагает, что IST имеет только одну интерпретацию. Фактически, Ирландия, Израиль и Индия используют аббревиатуру IST. Таким образом, такую ​​функцию было бы невозможно создать. - person Matt Johnson-Pint; 07.02.2019

Обновление 2020 г.

Где-то за последние 5 лет это перестало работать. Теперь попробуйте:

var timeZone = moment.tz.guess();
var time = new Date();
var timeZoneOffset = time.getTimezoneOffset();
moment.tz.zone(timeZone).abbr(timeZoneOffset);
person crash springfield    schedule 05.02.2020

После долгих поисков это, кажется, работает.

const t = moment.tz.guess();
timeZone = moment.tz(t).zoneAbbr();;
person King    schedule 16.11.2020

Из последних документов о часовых поясах.

moment.tz(String).format("Z z"); // -08:00 PST
moment.tz(String).zoneAbbr();    // PST
moment.tz(String).zoneName();    // PST

Несколько примеров:

moment.tz(moment.tz.guess()).zoneAbbr(); // PST
moment.tz("America/New_York").zoneAbbr(); // EST
person jjbskir    schedule 13.02.2020

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

 var test = momentUpdateDate._d.toString().substring(test.indexOf('(')+1, test.indexOf(')'));
person user3459287    schedule 04.05.2015
comment
Вы не должны использовать _d, а скорее .toDate(), но все же это не рекомендуется, поскольку вывод toString зависит от реализации и не гарантируется, что он будет отформатирован каким-либо определенным образом. На практике данные о часовом поясе иногда сокращаются, иногда расширяются, иногда отсутствуют. - person Matt Johnson-Pint; 26.04.2016