在 javascript 中使用 toLocaleString 模块得到错误的结果

发布时间:2021-02-25 07:20

在 javascript 中使用 toLocaleString 方法时得到错误的结果

当月产量 = M01,预期月产量 = 一月

有没有人遇到过同样的问题并解决了?

const milisecond = 1614237860725;
const expiryDate = new Date();
expiryDate.setTime(milisecond);
const month = expiryDate.toLocaleString('default', {
  month: 'long'
});
console.log(month)

回答1

我只是在这里假设(因为你根本没有提到 node.js),但是当 node.js 是用“小型 ICU”编译时,你会得到一月份的 M01,它没有包括区域设置数据(英语除外)。

它在文档中:https://nodejs.org/api/intl.html#intl_embed_a_limited_set_of_icu_data_small_icu

引用文档(查看示例中的注释):

<块引用>

此选项静态生成针对 ICU 库的二进制链接,并在节点可执行文件中包含 ICU 数据的子集(通常只有英文区域设置)。

small-icu 完全支持只需要 ICU 库本身的功能,例如 String.prototype.normalize() 和 WHATWG URL 解析器。此外还需要 ICU 语言环境数据的功能,例如 Intl.DateTimeFormat,通常仅适用于英语语言环境:

const january = new Date(9e8);
const english = new Intl.DateTimeFormat('en', { month: 'long' });
const spanish = new Intl.DateTimeFormat('es', { month: 'long' });

console.log(english.format(january));
// Prints "January"
console.log(spanish.format(january));
// Prints "M01" on small-icu
// Should print "enero"