推荐使用 Intl.DateTimeFormat 安全格式化日期时间:不依赖第三方库、支持国际化、输出稳定;也可手动提取字段拼接,注意补零和月份偏移;比较日期应显式调用 getTime()。

JavaScript 本身没有内置的日期格式化函数,Date 对象默认转字符串可读性差,类型计算也容易出错——关键在于别直接拼接或用 toString(),而是用标准方法提取值、手动组装,或借助现代 API(如 Intl.DateTimeFormat)和谨慎的毫秒运算。
用 Intl.DateTimeFormat 安全格式化日期时间
这是目前最推荐的方式:不依赖第三方库、支持国际化、输出稳定、不修改 Date 实例。
例如:
-
基础用法:
new Intl.DateTimeFormat('zh-CN').format(new Date())→"2024/5/20 下午3:42:15" -
自定义格式:
new Intl.DateTimeFormat('en-US', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }).format(date)→"05/20/2024, 03:42 PM" -
避免时区陷阱:显式传入
{ timeZone: 'Asia/Shanghai' },否则默认用本地时区
手动提取字段 + 字符串拼接(轻量可控)
适合简单固定格式,比如 YYYY-MM-DD HH:mm:ss。注意补零、月份从 0 开始等细节。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
示例:
- 获取年月日:
date.getFullYear()、date.getMonth() + 1、date.getDate() - 补零技巧:
String(n).padStart(2, '0')或n - 组合示例:
`${y}-${m}-${d} ${H}:${i}:${s}`,其中H = date.getHours(),i = date.getMinutes(),s = date.getSeconds()
日期类型计算:统一用毫秒做加减,再转回 Date
Date 对象本质是毫秒数,所有加减都应基于 getTime(),而不是直接对 Date 实例做算术(会隐式调用 valueOf(),但易混淆)。
- 加 3 天:
new Date(date.getTime() + 3 * 24 * 60 * 60 * 1000) - 两个日期相差天数:
Math.floor((date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24)) - 注意:月份/年份增减不能简单加毫秒(因天数不固定),要用
setMonth()或setFullYear()等方法
常见坑与规避建议
很多问题源于对 Date 行为理解偏差:
-
月份从 0 开始:1 月是
0,12 月是11;打印前务必+1 -
构造函数解析字符串有歧义:如
new Date('2024-05-20')是 UTC 时间,'2024/05/20'才是本地时间;建议用明确参数方式:new Date(2024, 4, 20) -
比较 Date 要用 getTime():直接
date1 > date2可以工作(因重载了valueOf),但语义不清,建议写成date1.getTime() > date2.getTime()

















