JavaScript Date格式化有三种方式:1. 手动拼接+padStart补零,适合简单固定格式;2. Intl.DateTimeFormat API,推荐用于国际化场景,自动适配地区与时区;3. 自定义函数解析模板字符串,兼顾复用性与灵活性。

JavaScript 原生的 Date 对象不直接支持自定义格式化字符串(比如 "yyyy-MM-dd HH:mm:ss"),但可以通过组合其内置方法手动拼接,或借助现代 API(如 Intl.DateTimeFormat)和少量逻辑实现灵活、可靠、本地化友好的格式化。
用原生方法手动拼接(轻量、可控)
适合简单固定格式(如 "2024-03-15 14:28:05"),关键是补零和按需取值:
-
getFullYear()→ 四位年份 -
getMonth() + 1→ 注意月份从 0 开始,要加 1 -
getDate()→ 日(1–31) -
getHours()/getMinutes()/getSeconds()→ 时分秒 - 用
String(n).padStart(2, '0')补零(推荐),或写个简单函数
示例:
const d = new Date();
const fmt = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')} ` +
`${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}:${String(d.getSeconds()).padStart(2, '0')}`;
// → "2024-03-15 14:28:05"
用 Intl.DateTimeFormat(推荐,国际化友好)
这是标准、健壮、支持多语言/时区的方式,无需手动补零,且能自动适配地区习惯(如美国用 MM/DD/YYYY,中国用 YYYY/MM/DD):
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 传入 locale(如
'zh-CN'、'en-US')和 options 配置年月日、时分秒等字段宽度('2-digit'或'numeric') - 调用
.format()得到字符串;也可用.formatToParts()获取结构化结果,自行组装 - 支持时区(
timeZone: 'Asia/Shanghai')
示例(中文格式):
const d = new Date();
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
});
console.log(formatter.format(d)); // → "2024/03/15 下午 14:28:05"(取决于系统设置)
// 若强制 24 小时制且无 AM/PM,可加 hourCycle: 'h23'
用模板字符串 + 自定义函数(平衡灵活性与复用性)
如果项目中多次需要同一种格式(如 "YYYY-MM-DD HH:mm"),可封装一个简易解析函数:
- 把格式字符串中的占位符(如
YYYY、MM、dd)替换成对应值 - 注意大小写区分(
MM是月,mm是分),并统一补零 - 不依赖外部库,比正则全量解析更轻,也比每次手写拼接更省事
简版示意:
function formatDate(date, fmt = 'YYYY-MM-dd HH:mm:ss') {
const map = {
YYYY: date.getFullYear(),
MM: String(date.getMonth() + 1).padStart(2, '0'),
dd: String(date.getDate()).padStart(2, '0'),
HH: String(date.getHours()).padStart(2, '0'),
mm: String(date.getMinutes()).padStart(2, '0'),
ss: String(date.getSeconds()).padStart(2, '0')
};
return fmt.replace(/YYYY|MM|dd|HH|mm|ss/g, token => map[token]);
}
formatDate(new Date(), 'YYYY年MM月dd日 HH:mm'); // → "2024年03月15日 14:28"
注意事项和避坑点
不要用 toString()、toUTCString() 等默认方法——它们格式固定、不可控、不易解析;
避免魔数计算星期或闰年——格式化一般不需要这些,交给 Intl 或成熟库更稳妥;
时区是最大陷阱:getHours() 返回本地时间,getUTCHours() 返回 UTC 时间,务必明确需求;
生产环境建议优先用 Intl.DateTimeFormat,它被所有现代浏览器支持,且天然兼容 i18n。

















