使用moment-timezone获取时区的长偏移名称

问题描述

luxon库添加了此功能获取offsetNameLong认证。到时区ianaName,它提供了特定于语言环境的翻译区域名称。例如

DateTime.local().setLocale("en-US").setZone("America/Los_Angeles").offsetNameLong // prints Pacific Daylight Time
DateTime.local().setLocale("ja-JP").setZone("America/Los_Angeles").offsetNameLong // prints アメリカ太平洋夏時間

由于luxon对IE浏览器的支持较少(除非使用polyfills),所以我想使用moment-timezone做类似的事情。我只是很好奇moment-timezone是否提供了类似的功能来执行相同操作,或者是否提供了实现此功能的任何其他选择。

解决方法

好像moment.js不支持时区的长名称,但是提供了一种使用长名称的自定义方式,而不是zoneAbbr()返回的缩写。

参考https://momentjs.com/timezone/docs/#/using-timezones/formatting/

var abbrs = {
    EST : 'Eastern Standard Time',EDT : 'Eastern Daylight Time',CST : 'Central Standard Time',CDT : 'Central Daylight Time',MST : 'Mountain Standard Time',MDT : 'Mountain Daylight Time',PST : 'Pacific Standard Time',PDT : 'Pacific Daylight Time',};

moment.fn.zoneName = function () {
    var abbr = this.zoneAbbr();
    return abbrs[abbr] || abbr;
};

moment.tz([2012,0],'America/New_York').format('zz');    // Eastern Standard Time
moment.tz([2012,5],'America/New_York').format('zz');    // Eastern Daylight Time
moment.tz([2012,'America/Los_Angeles').format('zz'); // Pacific Standard Time
moment.tz([2012,'America/Los_Angeles').format('zz'); // Pacific Daylight Time