首页 > 解决方案 > Javascript:Firefox 忽略 Date.toLocaleString 和 Intl.DateTimeFormat 中的 dateStyle 和 timeStyle 选项

问题描述

console.log(Intl.DateTimeFormat(undefined, {timeStyle: "long", dateStyle: "long"}).format());

Chrome 说:“美国东部标准时间 2020 年 2 月 13 日晚上 7:33:18”。

火狐说:“2020 年 2 月 13 日”

Firefox 在使用toLocaleString.

var date = new Date();
console.log(date.toLocaleString(undefined, {timeStyle: "short", dateStyle: "short"}));
console.log(date.toLocaleString(undefined, {timeStyle: "medium", dateStyle: "medium"}));
console.log(date.toLocaleString(undefined, {timeStyle: "long", dateStyle: "long"}));

所有这些行在 Firefox 中给出相同的结果:“2/13/2020, 8:04:11 PM”。Chrome 正确地给出了不同的值。

这是怎么回事?如何在 Firefox 中获取区域设置正确的日期字符串?

编辑:显然 Firefox 不支持这些属性。

标签: javascriptfirefox

解决方案


和选项仍处于提案状态dateStyle(第 3 阶段)。timeStyle

浏览器还没有被迫实现它,并且很可能希望在实现它之前等待规范稳定。

目前,您仍然可以使用默认选项来获得不太自然但仍然本地化的结果:

const supports = testDateTimeStyleSupport();

const opts = supports ? { dateStyle: "long", timeStyle: "long" } : {
  weekday: 'long',
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  hour: "numeric",
  minute: "numeric",
  second: "numeric"
}

console.log( new Intl.DateTimeFormat( undefined, opts ).format() );

// assumes both are supported or none
function testDateTimeStyleSupport() {
  let support = false;
  const tester = {
    get dateStyle() { support = true; }
  };
  new Intl.DateTimeFormat( undefined, tester );
  return support;
}


推荐阅读