javaScript日期格式化推荐优先使用原生方法满足简单需求,复杂场景选用Day.js或date-fns;Moment.js已不推荐新项目使用。

javascript 中格式化日期,原生方法能应付基础需求,但处理时区、多语言、相对时间或复杂模板时容易出错。推荐用成熟库来减少 bug 和开发时间。
原生 Date 对象的常用格式化方式
不用额外库也能快速得到常见格式,适合简单场景:
- toLocaleDateString():按用户本地习惯输出,支持 locale 和 options 参数,比如
new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })→"2024-06-15" - toISOString():返回标准 ISO 8601 字符串(UTC 时间),如
"2024-06-15T08:30:45.123Z",适合存储或 API 交互 - 手动拼接:用
getFullYear()、getMonth() + 1、getDate()等组合,注意月份从 0 开始、补零需自行处理
Day.js:轻量且够用的现代选择
体积小(约 2KB)、不可变、API 类似 Moment.js,是当前最主流的轻量替代方案:
- 安装:
npm install dayjs - 基本用法:
dayjs().format('YYYY-MM-DD HH:mm:ss') - 支持插件扩展:如
relativeTime(“2 小时前”)、timezone(时区转换)、locale(中文/日文等) - 不修改原 Date 对象,无全局污染,Tree-shaking 友好
date-fns:函数式、可拆分的工具集
以纯函数设计,每个功能独立导出,适合按需引入、避免冗余代码:
立即学习“Java免费学习笔记(深入)”;
- 安装:
npm install date-fns - 用法示例:
format(new Date(), 'yyyy-MM-dd HH:mm:ss')(注意 Token 大小写敏感) - 可单独引入函数:
import { format, addDays, isAfter } from 'date-fns',打包体积更可控 - 天然支持 typescript,文档清晰,更新活跃
Moment.js:经典但已进入维护模式
曾是行业标准,功能全面但体积大(~300KB)、mutable 设计易引发意外修改。官方已明确建议新项目改用 Day.js 或 date-fns:
基本上就这些。日常开发优先选 Day.js(上手快、生态稳)或 date-fns(按需精确、函数式偏好)。原生方法够用就别加依赖,复杂国际化或时区逻辑再考虑对应插件。不复杂但容易忽略的是:始终确认输入时间是否含时区信息,否则本地格式化可能和预期不符。