JavaScript原生Date无内置格式化方法,推荐用toLocaleString()适配本地习惯或toISOString()获取UTC标准时间;手动拼接需注意getMonth()返回0-11及补零处理。

JavaScript 原生 Date 对象本身不提供格式化方法,直接调用 toString() 或 toDateString() 输出的格式不可控、不跨浏览器一致,也不支持自定义分隔符或字段顺序——这意味着你不能靠它实现类似 "2024-07-15 14:30:45" 这样的稳定输出。
用 toLocaleString() 快速适配本地习惯
这是最轻量、无需引入库的方案,适合展示给用户看的时间(如“今天下午 2:30”或“2024/7/15, 14:30:45”)。
-
toLocaleString()默认按系统区域设置输出,但可传入locales和options精确控制:比如new Date().toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' })会输出"2024/07/15, 14:30:45" - 注意
month和day设为'2-digit'才能补零;设为'numeric'可能输出"7"而非"07" - 不同浏览器对
hour12: true的处理有细微差异,若需强制 24 小时制,必须显式指定hour12: false
手动拼接字符串时小心 getMonth() 返回值
这是新手踩坑最多的地方:getMonth() 返回的是 0~11,不是 1~12;getDate() 才是 1~31。
- 错误写法:
date.getFullYear() + '-' + date.getMonth() + '-' + date.getDate()→ 得到"2024-6-15" - 正确写法:
date.getFullYear() + '-' + String(date.getMonth() + 1).padStart(2, '0') + '-' + String(date.getDate()).padStart(2, '0') - 所有数字字段(小时、分钟、秒)都建议用
padStart(2, '0')补零,避免"2024-7-5 9:5:3"这类不规范输出
需要 ISO 格式且带时区?优先用 toISOString()
toISOString() 返回严格符合 ISO 8601 的 UTC 时间字符串,形如 "2024-07-15T06:30:45.123Z",适合 API 通信或日志记录。
经过一段时间的开发,以及内部测试,同程网联盟景区新版程序正式发布推出,感谢广大联盟会员一直以来的支持与关注! 同程网联盟景区新版程序新功能介绍:1.统一的页面风格。页面风格将与随后推出的度假线路、酒店、机票以及融合版联盟程序风格保持一直;2.新增后台管理系统。可更加方便快捷的对网站进行个性化设置;3.动态与伪静态切换。后台操作,简单便捷;4.缓存管理。新增缓存,提高网站访问速度,后台可定期清理;5
立即学习“Java免费学习笔记(深入)”;
- 它总是返回 UTC 时间,和本地时区无关——如果你传入
new Date('2024-07-15 14:30:45'),再调toISOString(),得到的是该时间换算成 UTC 后的结果 - 若要输出本地时区的 ISO 风格字符串(如
"2024-07-15T14:30:45+08:00"),原生没有直接方法,得手动拼:用getTimezoneOffset()计算偏移并格式化 -
toISOString()不支持截断毫秒(如只要秒级),需先setMilliseconds(0)再调用
真正难的不是“怎么拼出一个字符串”,而是搞清你要的是本地时间还是 UTC、是否需兼容老浏览器、是否要响应用户系统设置——这些决定远比写几行 padStart 更影响最终效果。










