我刚刚开始使用Intl包,我不太明白我们应该如何在我们的 web 应用程序中使用它。
例如,以下代码段使用Intl.DateTimeFormat和不同的语言环境(en-GB
, de-DE
)和时区(Europe/Vienna
和Japan
.
const date = new Date(Date.UTC(2020, 11, 20, 3, 23, 16, 738));
console.log(
new Intl.DateTimeFormat("en-GB", {
timeZone: "Europe/Vienna",
dateStyle: "long",
timeStyle: "long"
}).format(date)
);
// expected output: 20 December 2020 at 04:23:16 CET
console.log(
new Intl.DateTimeFormat("de-DE", {
timeZone: "Japan",
dateStyle: "long",
timeStyle: "long"
}).format(date)
);
// expected output: 20. Dezember 2020 um 12:23:16 GMT+9
这在我的 Chrome 桌面浏览器中按预期工作。
但据我了解文档,这取决于浏览器实现:
timeZone
要使用的时区。实现必须识别的唯一值是“UTC”;默认值是运行时的默认时区。实现还可以识别 IANA 时区数据库的时区名称,...
那么我们如何确保我们的应用程序在每个浏览器上都能运行呢?
- 例如,当我们有一个受支持时区的精选列表时,有没有办法从我们的服务器动态加载这些时区?(或猴子补丁,或 polyfill,或使用 3rd 方库,..)
注意:我们不想使用 momentjs、date-fns-tz 等。 - 我想语言环境也是如此(即浏览器可能只支持某些语言环境)-我在文档中找不到有关此的信息。同样对于语言环境,我们需要一种动态加载我们想要支持的语言环境的方法
笔记:
- 我们不需要填充 Intl 包(因为我们只针对现代浏览器),我们只是想确保我们想要支持的时区和语言环境可用
- 实际上我正在寻找类似 NodeJs在运行时提供 ICU 数据的东西- 仅用于浏览器