【发布时间】:2020-07-20 12:25:34
【问题描述】:
我正在尝试使用 ECMA-402 国际 API 来获取非本地时区(服务器时区为 UTC)中的时区缩写。我知道其他方法可以得到这个。我试图了解并充分利用 International API 的局限性。我可以自己获取完整的时区名称并进行映射,但是由于缩写在 IANA tz 数据库中,并且国际 API 应该基于此,它似乎应该能够生成它们,这让我觉得我是做错事了。
我有以下代码:
const fmt = new Intl.DateTimeFormat('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: 'numeric',
fractionalSecondDigits: 3,
hour12: false,
weekday: 'short',
timeZoneName: 'short',
timeZone: 'Pacific/Auckland'
});
const now = new Date();
console.log(fmt.format(now));
const fmt2 = new Intl.DateTimeFormat('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: 'numeric',
fractionalSecondDigits: 3,
hour12: false,
weekday: 'short',
timeZoneName: 'short',
timeZone: 'America/Los_Angeles'
});
console.log(fmt2.format(now));
在节点 12.16.1 和 Firefox 73.0.1 中,这会产生如下输出:
Wed, 04/08/2020, 18:14:50 GMT+12
Tue, 04/07/2020, 23:14:50 PDT
America/Los_Angeles 时区按预期获得时区缩写,但 Pacific/Auckland 时区没有。 IANA tz 数据库有 Pacific/Auckland 的缩写,由操作系统 (Debian Linux) 生成。
我有什么不同的方法可以从国际 API 中获取缩写吗?或者这仅仅是最先进的技术?
我注意到 luxon 和 date-fns-tz 都依赖于 International API,而且它们也无法生成 Pacific/Auckland 的缩写。
【问题讨论】:
标签: javascript timezone