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

时间:2019-05-06 13:34:19

标签: javascript timezone momentjs timezone-offset

我使用矩库使用以下代码获取时区

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 个答案:

答案 0 :(得分:2)

您可以通过快速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()
  };
});

答案 1 :(得分:2)

您可以使用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则会显示相同的内容。