以下面我正在处理的项目的minimal reproducible example为例,该项目在我收到时区名称的地方,需要将其转换为“人类可读格式”。
即:
America/Los_Angeles
America Los Angeles
我现在,您可能会认为“ America / Los_Angeles”已经是“人类可读的”,并且我同意,但是将其转换为上述格式(或类似格式,不包括斜杠,下划线等)是我的问题的要求
此外,可以使用正则表达式轻松实现此目的,但是由于moment和moment 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项目中。
答案 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