Intl.DateTimeFormat 可直接创建格式化器,传入地区码和选项对象后调用 .format(date) 即可实现多语言、时区可控的稳定日期格式化,不修改原始 Date 对象。

直接用 Intl.DateTimeFormat 创建格式化器,传入语言地区码和选项对象,再调用 .format(date) 就行。它不改原始 Date 对象,输出稳定,还天然支持多语言和时区控制。
基础用法:快速本地化显示
最简方式就是只传地区码,比如:
-
new Intl.DateTimeFormat('zh-CN').format(new Date())→ "2026/8/28 下午7:22:15" -
new Intl.DateTimeFormat('en-US').format(new Date())→ "8/28/2026, 7:22:15 PM" -
new Intl.DateTimeFormat('ja-JP').format(new Date())→ "2026年8月28日 19:22:15"
自定义格式:精确控制每个字段
通过 options 对象指定年、月、日、时、分等显示样式,常用配置包括:
-
year: 'numeric'(显示 2026)或'2-digit'(显示 26) -
month: '2-digit'(08)、'short'(8月)、'long'(八月) -
day: '2-digit'(28),weekday: 'short'(周五) -
hour: '2-digit'、minute: '2-digit'、second: '2-digit' -
hour12: false强制 24 小时制;timeZone: 'Asia/Shanghai'锁定时区
示例:生成 2026-08-28 19:22:15 格式:
立即学习“Java免费学习笔记(深入)”;
const formatter = new Intl.DateTimeFormat('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
});
formatter.format(new Date()); // "2026-08-28 19:22:15"
避免常见陷阱
几个容易出错但关键的点:
-
别依赖默认行为:不传
options时,不同浏览器对“月/日是否补零”可能不一致;显式写month: '2-digit'才可靠 -
时区要主动声明:不设
timeZone会用用户本地时区,后端时间可能对不上;国际化项目建议统一用timeZone: 'UTC'或业务所在时区 -
格式化器可复用:创建一次实例,多次调用
.format(),比每次调用toLocaleDateString()更高效 -
验证地区码支持:可用
Intl.DateTimeFormat.supportedLocalesOf(['zh-CN', 'en-US'])检查当前环境是否支持


















