时刻/时区时区中是否有任何内置功能可以将时区名称转换为“人类可读格式”?

时间:2019-10-30 13:35:07

标签: javascript angular typescript momentjs moment-timezone

以下面我正在处理的项目的minimal reproducible example为例,该项目在我收到时区名称的地方,需要将其转换为“人类可读格式”。

即:

  • 输入:America/Los_Angeles
  • 输出:America Los Angeles

我现在,您可能会认为“ America / Los_Angeles”已经是“人类可读的”,并且我同意,但是将其转换为上述格式(或类似格式,不包括斜杠,下划线等)是我的问题的要求

此外,可以使用正则表达式轻松实现此目的,但是由于momentmoment timezone被用作项目的一部分。...我想知道,有没有一种方法可以实现使用这些库中的任何库提供的内置机制吗?


import 'moment-timezone';
import * as moment from 'moment';

const tz = moment.tz.zone("America/Los_Angeles");

const result = tz.name;

console.log(result);  // America/Los_Angeles, need "America Los Angeles"

如果有帮助,这在Angular项目中。

1 个答案:

答案 0 :(得分:1)

此问题在the docs on formatting中解决:

  

Moment.js还为长格式时区名称提供了一个钩子。由于这些字符串通常已本地化,因此Moment Timezone不会为区域提供任何长名称。

     

要提供长格式名称,您可以覆盖moment.fn.zoneName并使用zz令牌。

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, 0], 'America/Los_Angeles').format('zz'); // Pacific Standard Time
moment.tz([2012, 5], 'America/Los_Angeles').format('zz'); // Pacific Daylight Time