为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2022-12-09 15:12:52
让我们考虑以下代码: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)));


查看完整回答
反对 回复 2022-12-09
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信