gpt4 book ai didi

javascript - 如何从 javascript Intl.DateTimeFormat 获取时区缩写

转载 作者:行者123 更新时间:2023-12-03 06:58:09 44 4
gpt4 key购买 nike

我正在尝试使用 ECMA-402 International 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 时区按预期获得时区缩写,但太平洋/奥克兰时区没有。 IANA tz 数据库具有 Pacific/Auckland 的缩写,由操作系统 (Debian Linux) 生成。

我有什么不同的方法可以从国际 API 中获取缩写吗?或者这仅仅是最先进的技术?

我注意到 luxon 和 date-fns-tz 都依赖于国际 API,而且它们也无法生成 Pacific/Auckland 的缩写。

最佳答案

ECMAScript 国际化 API 的大多数实现都从 Unicode CLDR 派生时区缩写字符串。 ,而不是来自 IANA。 IANA 中的缩写词只有英文,近年来,许多缩写词已被删除,人们发现它们是被发明出来的。

不幸的是,CLDR 数据集中实际包含的时区缩写很少。

一般来说,时区缩写很难达成一致。在某些情况下,同一时区会使用多个缩写。有些文化改用英语缩写,而另一些文化则使用自己的语言,而许多文化根本不使用它们。

鉴于这一切,我想说您仍然应该使用 Intl API 给出的输出。在有缩写的地方你会得到它们,在没有它们的地方你会有一个数字偏移量。是的——这就是当前的技术水平。

关于javascript - 如何从 javascript Intl.DateTimeFormat 获取时区缩写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61094809/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com