Intl.DateTimeFormat 在节点和浏览器中以不同的方式工作

让我们考虑以下代码:


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('-');
};


守着一只汪
浏览 108回答 1
1回答

米脂

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)));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript