Intl.DurationFormat 现已成为基准版

发布时间:2025 年 3 月 20 日

您可能会在网页上看到的常见信息是一段文字,用于指明某个事件还有多长时间到来,或某个事件发生以来已经过去了多长时间。这通常表示为字符串,以小时、分钟、秒或其他实用的时间单位传达时长。

Intl.DurationFormat 是一项实用功能,可在浏览器中为您执行此操作,同时考虑到您可能有的任何国际化需求,而无需额外的 JavaScript。自 2025 年 3 月起,该功能已变为“新推出的基准”。

Intl.DurationFormat 的工作方式

Intl.DurationFormat 是一个类,在实例化时会返回一个字符串,用于描述时长。其工作原理是指定一个对象,其中包含与您希望生成字符串的时间单位对应的键和值:

// Specify the duration:
const duration = {
  years: 1,
  hours: 20,
  minutes: 15,
  seconds: 35
};

// Output: '1 yr, 20 hr, 15 min, 35 sec'
new Intl.DurationFormat('en').format(duration);

如需以长格式返回字符串,请将值 'long' 传递给构造函数的第二个参数中的 style 选项:

const duration = {
  years: 1,
  hours: 20,
  minutes: 15,
  seconds: 35
};

// Output: '1 year, 20 hours, 15 minutes, 35 seconds'
new Intl.DurationFormat('en', { style: 'long' }).format(duration);

到目前为止,这些示例生成的字符串均为英语。鉴于这是一项国际化功能,其真正实用之处在于,您可以传入任何有效的语言区域,并以您需要的任何受支持语言的格式获取字符串:

const duration = {
  years: 1,
  hours: 20,
  minutes: 15,
  seconds: 35
};

// Output: '1 Jahr, 20 Stunden, 15 Minuten und 35 Sekunden'
new Intl.DurationFormat('de', { style: 'long' }).format(duration);

// Output: '1 año, 20 horas, 15 minutos y 35 segundos'
new Intl.DurationFormat('es', { style: 'long' }).format(duration);

// Output: '1年20小时15分钟35秒钟'
new Intl.DurationFormat('zh', { style: 'long' }).format(duration);

// Output: '1 år, 20 timer, 15 minutter og 35 sekunder'
new Intl.DurationFormat('no', { style: 'long' }).format(duration);

// Output: 'mwaka 1, saa 20, dakika 15 na sekunde 35'
new Intl.DurationFormat('sw', { style: 'long' }).format(duration);

这些示例仅展示了您可以使用这项新功能执行的一些操作。如需详细了解其功能,请参阅 MDN 上的 Intl.DurationFormat 文档