0

我刚刚开始使用Intl包,我不太明白我们应该如何在我们的 web 应用程序中使用它。

例如,以下代码段使用Intl.DateTimeFormat和不同的语言环境(en-GB, de-DE)和时区(Europe/ViennaJapan.

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 时区数据库的时区名称,...

那么我们如何确保我们的应用程序在每个浏览器上都能运行呢?

  1. 例如,当我们有一个受支持时区的精选列表时,有没有办法从我们的服务器动态加载这些时区?(或猴子补丁,或 polyfill,或使用 3rd 方库,..)
    注意:我们不想使用 momentjs、date-fns-tz 等。
  2. 我想语言环境也是如此(即浏览器可能只支持某些语言环境)-我在文档中找不到有关此的信息。同样对于语言环境,我们需要一种动态加载我们想要支持的语言环境的方法

笔记:

  • 我们不需要填充 Intl 包(因为我们只针对现代浏览器),我们只是想确保我们想要支持的时区和语言环境可用
  • 实际上我正在寻找类似 NodeJs在运行时提供 ICU 数据的东西- 仅用于浏览器
4

0 回答 0