new Date() 默认输出 ISO 格式,需用 toLocaleString() 或 Intl.DateTimeFormat 实现本地化格式;注意 getMonth() 返回 0–11、补零用 padStart、时区用 IANA ID,复杂场景推荐 dayjs/luxon。

JavaScript 中 new Date() 返回的对象本身不带格式化能力
直接 console.log(new Date()) 会输出类似 2024-05-22T14:32:15.892Z 的 ISO 字符串,这不是你想要的“2024年5月22日 14:32”这种形式。浏览器原生不提供类似 Python 的 strftime 函数,必须手动拼接或借助方法。
用 toLocaleDateString() 和 toLocaleTimeString() 快速适配本地习惯
这两个方法能按用户系统语言/时区自动选择分隔符、顺序和缩写,比硬编码更可靠:
const d = new Date();
console.log(d.toLocaleDateString('zh-CN')); // "2024/5/22"
console.log(d.toLocaleTimeString('zh-CN')); // "下午2:32:15"
console.log(d.toLocaleString('zh-CN')); // "2024/5/22 下午2:32:15"
- 第一个参数是 locale(如
'en-US'、'ja-JP'),不传则用浏览器默认 - 可传第二个参数对象控制细节,例如:
{ year: 'numeric', month: 'long', day: 'numeric' }→ “2024年5月22日” - 注意:
month: '2-digit'返回"05",'numeric'返回5(无前导零)
手写格式化函数时,getMonth() 返回 0–11 是最大陷阱
很多人写 date.getMonth() + 1 却忘了加空格或补零,导致 “2024-5-5 9:5:5” 这种丑陋输出。安全做法是封装补零逻辑:
function formatDate(d) {
const pad = n => String(n).padStart(2, '0');
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
}
formatDate(new Date()); // "2024-05-22 14:32:15"
-
getMonth()返回 0(一月)到 11(十二月),务必 +1 -
getDate()是“几号”,getDay()是“星期几”(0=周日),别混用 -
padStart(2, '0')比toString().length === 1 ? '0'+n : n更简洁可靠
需要时区控制?别信 toUTCString(),用 Intl.DateTimeFormat 或库
toUTCString() 固定输出 UTC 时间且格式不可控;toLocaleString() 默认用本地时区。真要指定时区(比如显示东京时间),必须用 Intl.DateTimeFormat:
立即学习“Java免费学习笔记(深入)”;
const d = new Date();
new Intl.DateTimeFormat('zh-CN', {
timeZone: 'Asia/Tokyo',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
}).format(d); // "2024/05/22 23:32"
- 时区 ID 必须是 IANA 格式(
'Asia/Shanghai'、'America/New_York'),不能写'GMT+8' - Node.js 18+ 和现代浏览器都支持,但 IE 完全不支持
- 复杂场景(如相对时间、解析字符串)建议用
dayjs或luxon,原生 API 对模糊输入容忍度极低











