Как получить часовой пояс из 3 букв, используя момент? - PullRequest
2 голосов
/ 06 мая 2019

Я получаю часовые пояса, используя следующий код, используя библиотеку моментов

console.log(moment.tz.names())

, что дает мне результат в следующем формате

0: "Africa/Abidjan"
1: "Africa/Accra"
2: "Africa/Addis_Ababa"
3: "Africa/Algiers"
4: "Africa/Asmara"
5: "Africa/Asmera"
6: "Africa/Bamako"

Мне нужно получить только сокращения, например,

enter image description here

Может ли момент дать такую ​​гибкость, а также мне нужно также получить смещения?

Спасибо !!!

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Вы можете использовать moment.format (string) , чтобы получить сокращение, передав z аргумент:

moment.tz(zone).format('z')

и смещение, передав Z аргумент:

moment.tz(zone).format('Z')

console.log(
  moment.tz.names().forEach(zone => { 
    console.log( moment.tz(zone).format('Z z') ) 
  }) 
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.25/moment-timezone-with-data.min.js"></script>

Обратите внимание, что маркер форматирования z не всегда будет отображать сокращенное имя часового пояса, вместо этого будут отображаться временные смещения для каждого региона и одинаковыевещь для moment#zoneAbbr.

2 голосов
/ 06 мая 2019

Вы можете быстро создать список-компаньон для полных имен зон, полученных из moment.tz.names(), быстрым .map():

let abbrs = moment.tz.names().map((z) => moment.tz(z).zoneAbbr());

Для любого объекта зоны .zoneAbbr() дает сокращение зоны.

Если вы хотите смещения, вы можете вместо этого позвонить .utcOffset():

let offsets = moment.tz.names().map((z) => moment.tz(z).utcOffset());

или получить оба:

let zoneInfo = moment.tz.names().map((z) => {
  let zone = moment.tz(z);
  return {
    abbr: zone.zoneAbbr(),
    offset: zone.utcOffset()
  };
});
...