如何使用 momentjs 获取 3 个字母的时区?

How to get timezone in 3 letters using momentjs?

我正在使用时刻库​​使用以下代码获取时区

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"

我只需要得到类似

的缩写

moment 可以提供这样的灵活性吗,我也需要获得偏移量吗?

谢谢!!!

您可以通过快速 .map():

为您从 moment.tz.names() 获得的完整区域名称生成一个伴随列表
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()
  };
});

您可以使用 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.[=19 也是如此=]