让我们考虑以下代码:console.log(new Intl.DateTimeFormat('pl-PL', { year: 'numeric', month: '2-digit', day: '2-digit'}).format(new Date(2019, 2, 4)));在Node JS它给予2019-03-04但在chrome browser它回报04.03.2019。为什么?我的问题类似于:为什么 Intl.DateTimeFormat 在不同的浏览器中产生不同的结果?node 和 chrome 的官方文档在哪里,我什么时候可以阅读这些差异。更新:它可能对某人有帮助,所以我将添加它以强制执行我正在使用此代码的通用格式:export const useDashInDate = (dateString: string): string => {
return /\d{4}-\d{2}-\d{2}/.test(dateString) ? dateString : dateString.split('.').reverse().join('-');
};
1 回答
米脂
TA贡献1836条经验 获得超3个赞
DateTimeFormat.format返回的字符串的格式是基于语言代码的,但是没有规范将语言映射到格式。因此,每个实现都可以自由地将语言映射到它想要的格式。大多数情况下,它们是一致的,但并非总是如此。如果不支持特定语言,它可能会回退到默认值(例如 ISO 8601 或像 en 这样的通用语言代码)。
如果您想要特定格式,请使用您自己的函数手动执行或使用库,请参阅如何格式化 JavaScript 日期。
例如,您可以将formatToParts与更通用的语言代码一起使用:
function format(date) {
let {year, month, day} = new Intl.DateTimeFormat('pl', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).formatToParts(date).reduce((acc, part) => {
if (part.type != 'literal') {
acc[part.type] = part.value;
}
return acc;
}, Object.create(null));
return `${day}.${month}.${year}`;
}
console.log(format(new Date(2019, 2, 4)));
添加回答
举报
0/150
提交
取消