You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js版本差异导致日期时间分隔符从逗号变为'at'

日期格式化行为变化原因及解决方案

问题复现

升级Node.js从v14.18.0到v16.17.1后,Intl.DateTimeFormat在英文locale下的格式化结果出现差异,代码示例如下:

const format_options = {
    hour: '2-digit',
    minute: '2-digit',
    year: 'numeric',
    day: 'numeric',
    month: 'short'
}

const date = new Date('2022-09-28T12:00:00.000');
console.log(new Intl.DateTimeFormat('en', format_options).format(date));
// pre v16.17.0: Sep 28, 2022, 12:00 PM
// post v16.17.0: Sep 28, 2022, 12:00 PM

format_options.month = 'long';
console.log(new Intl.DateTimeFormat('en', format_options).format(date));
// pre v16.17.0: September 28, 2022, 12:00 PM
// post v16.17.0: September 28, 2022 at 12:00 PM
//                                  ^

行为变化的原因

Node.js v16.17.0及之后版本同步了ICU(Unicode国际化组件)的规则更新。在英文locale下,ICU调整了日期时间组合的格式化逻辑:当使用month: 'long'展示完整月份名称时,为贴合英语母语的自然表达习惯,将日期与时间之间的分隔符从逗号改为了"at";而month: 'short'的短月份格式因属于更紧凑的表达,保留了原有的逗号分隔规则。这是国际化标准规范的调整,并非Node.js自身的自定义修改。

能否通过单一原生配置恢复原行为?

没有直接的单一配置项可以强制指定日期与时间的分隔符。Intl.DateTimeFormat的配置项仅控制年、月、日、时等单个时间组件的展示格式,分隔符这类连接元素是由对应locale的内置规则决定的,无法通过配置直接覆盖。

你提到的替换输出文本、分开格式化日期和时间后手动拼接的方案,是目前实现原格式的可行方式。如果坚持使用原生API,暂时没有更简洁的配置方案。


内容的提问来源于stack exchange,提问作者jaredk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:05:55