Intl.DateTimeFormat:日期与时间
date.toLocaleString() 背后就是它。传入一个 Date(某个绝对时刻),它按 locale 决定语言与排列、按 timeZone 决定投影到哪个城市的墙上时间 (wall-clock time)。两种用法:简便的 dateStyle /
timeStyle 预设(full/long/medium/short),或逐字段精确指定。
1 · 同一时刻,十一种 locale
把固定时刻 2026-06-06 09:30 用 dateStyle:'full' + timeStyle:'short' 显示:
2 · 全功能 playground
选 dateStyle/timeStyle 预设,或切到「逐字段」自行指定;再叠加 timeZone 与 hourCycle:
3 · 一个时刻,投影到不同城市
同一个绝对时刻(UTC 2026-06-06T09:30Z),换 timeZone 看各地的墙上时间——这就是「时刻 vs 显示」的分离:
4 · formatToParts & formatRange
formatToParts 把结果拆成带 type 的零件(可自由重排/上色);formatRange 智能合并区间:
**选择原则:**只要「完整的常规日期/时间」→ 用 dateStyle/timeStyle,不必手挑字段;要「只显示月+日」「带星期几」这种精确控制 → 逐字段({ weekday:'long', month:'short', day:'numeric' })。两套不可混用(同时给 dateStyle 和 weekday 会报错)。
timeZone 决定显示,不改时刻。Date 本身只是一个 UTC 时间戳;不传 timeZone 时用运行环境的本地时区。要稳定可复现(如服务端、测试),显式传 timeZone。需要做时区运算(而非只显示)请看
Temporal 系列。