dayjs JavaScript 时间日期处理库
dayjs
是一个非常轻量、简洁、易用且高性能的 JavaScript 时间日期处理库,它是为了替代更重的 Moment.js 而设计的,目标是提供 相似的 API,但体积更小、不可变(immutable)、模块化、更现代化。
✅ 一、dayjs 是什么?
**dayjs
是一个用于 解析、校验、操作和格式化日期/时间** 的 JavaScript 库,它的 API 设计风格和 Moment.js 几乎一致,但具有以下优势:
特性 | 说明 |
---|---|
✅ 轻量级 | 只有 ~2KB (gzipped 后更小),远小于 Moment.js(约 200KB+) |
✅ 不可变(Immutable) | 所有操作都返回新对象,不会修改原对象,更安全、更函数式 |
✅ 模块化 | 可按需引入插件,避免引入不必要的功能,保持体积最小化 |
✅ 链式调用 | 支持链式 API,使用直观、优雅 |
✅ 浏览器 & Node.js 兼容 | 可在前后端同时使用 |
✅ Moment.js 风格 API | 如果你熟悉 Moment.js,几乎可以零成本迁移到 Day.js |
🔗 官方资源
- GitHub(开源): https://github.com/iamkun/dayjs
- 官网文档: https://day.js.org/
- NPM 包: https://www.npmjs.com/package/dayjs
✅ 二、安装 dayjs
使用 npm 或 yarn 安装:
npm install dayjs
# 或
yarn add dayjs
✅ 三、基本使用(无需插件,开箱即用)
1. 引入 dayjs
import dayjs from 'dayjs'
2. 获取当前时间
const now = dayjs()
console.log(now.format()) // 输出当前时间,如:2024-06-20T12:00:00+08:00
3. 解析时间字符串
const date = dayjs('2024-06-20')
console.log(date.format('YYYY-MM-DD')) // 2024-06-20
4. 格式化日期
console.log(dayjs().format('YYYY年MM月DD日 HH:mm:ss'))
// 输出类似:2024年06月20日 14:05:30
✅ 四、常用 API 介绍
方法 | 说明 | 示例 |
---|---|---|
**dayjs() ** | 获取当前时间 / 创建 dayjs 对象 | dayjs() |
**dayjs('2024-06-01') ** | 从字符串解析时间 | dayjs('2024-06-01') |
**dayjs(1654321234000) ** | 从时间戳(毫秒)创建 | dayjs(1654321234000) |
**format('YYYY-MM-DD') ** | 格式化日期输出 | dayjs().format('YYYY/MM/DD') → '2024/06/20' |
**year() ** | 获取年份 | dayjs().year() → 如 2024 |
**month() ** | 获取月份(0-11) | dayjs().month() → 5(表示6月) |
**date() ** | 获取日(1-31) | dayjs().date() → 如 20 |
**hour() / minute() / second() ** | 时 / 分 / 秒 | dayjs().hour() |
**add(1, 'day') ** | 加 1 天 | dayjs().add(1, 'day') |
**subtract(1, 'month') ** | 减 1 个月 | dayjs().subtract(1, 'month') |
**isBefore() / isAfter() / isSame() ** | 比较日期 | dayjs().isAfter(anotherDay) |
**unix() ** | 获取时间戳(秒) | dayjs().unix() |
**valueOf() ** | 获取时间戳(毫秒) | dayjs().valueOf() |
✅ 五、格式化符号(format 语法)
符号 | 说明 | 示例 |
---|---|---|
YYYY | 4位数年份 | 2024 |
YY | 2位数年份 | 24 |
MM | 月份(01-12) | 06 |
M | 月份(1-12) | 6 |
DD | 日期(01-31) | 01 |
D | 日期(1-31) | 1 |
HH | 24小时制 小时(00-23) | 14 |
hh | 12小时制 小时(01-12) | 02 |
mm | 分钟(00-59) | 05 |
ss | 秒(00-59) | 30 |
A | 大写的 AM / PM | PM |
a | 小写的 am / pm | pm |
示例:
dayjs().format('YYYY-MM-DD HH:mm:ss A')
// 例如:2024-06-20 14:05:30 PM
✅ 六、插件系统(模块化功能扩展)
Day.js 的一个非常强大的特性是:默认只包含基础功能,其他功能(如时区、相对时间、周数等)需要通过插件引入,保持核心体积极小。
1. 引入插件方式
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc' // UTC 时间
import timezone from 'dayjs/plugin/timezone' // 时区
import relativeTime from 'dayjs/plugin/relativeTime' // 相对时间:2天前
import weekOfYear from 'dayjs/plugin/weekOfYear' // 获取第几周// 使用插件
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(relativeTime)
dayjs.extend(weekOfYear)
📦 所有插件需要单独安装(但大部分已内置在 dayjs ecosystem,可通过 npm 获取):
npm install dayjs
# 插件一般随着 dayjs 自动可用,无需再装,但有些高级功能可能需要
2. 常用插件介绍
插件 | 功能 | 说明 |
---|---|---|
**utc ** | 支持 UTC 时间 | dayjs.utc() |
**timezone ** | 支持时区转换 | 需要先引入 utc |
**relativeTime ** | 相对时间格式化 | 如:2天前 、3小时后 |
**weekOfYear ** | 获取一年中的第几周 | dayjs().week() |
**isLeapYear ** | 判断闰年 | dayjs().isLeapYear() |
**quarterOfYear ** | 获取季度 | 第几季度 |
**customParseFormat ** | 支持自定义格式解析 | 当你的日期字符串格式特殊时很有用 |
✅ 示例:使用相对时间插件
# 安装(通常无需单独安装,插件已随 dayjs 提供)
npm install dayjs
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'dayjs.extend(relativeTime)const now = dayjs()
const past = dayjs().subtract(2, 'day')console.log(past.fromNow()) // "2天前"
console.log(now.fromNow()) // "刚刚" 或 "几秒前"
✅ 七、与 Moment.js 对比
特性 | Day.js | Moment.js |
---|---|---|
体积 | ~2KB,非常小 | ~200KB,非常大 |
不可变性 | ✅ 支持(推荐) | ❌ 默认可变(但也可不可变) |
API 风格 | 类似 Moment.js,易迁移 | 原始设计 |
插件机制 | ✅ 模块化,可按需引入 | ❌ 功能全内置,体积大 |
维护状态 | ✅ 活跃(推荐用于新项目) | ⚠️ 已停止维护(legacy) |
链式调用 | ✅ 支持 | ✅ 支持 |
时区支持 | 需插件 (timezone ) | 内置但臃肿 |
✅ 结论:新项目强烈推荐使用 Day.js,老项目如无必要不必迁移,但 Day.js 是更现代、更轻量的选择。
✅ 八、总结
项目 | 说明 |
---|---|
dayjs 是什么? | 一个轻量、现代、易用的 JavaScript 日期时间处理库,API 类似 Moment.js,但更小、更快、更模块化 |
特点 | 🟢 极小体积(~2KB)、🟢 不可变、🟢 链式调用、🟢 模块化插件、🟢 Moment.js 风格 |
适合谁用? | 所有需要处理日期时间的 前端 / 后端 / 全栈项目,特别是追求性能和简洁的项目 |
推荐程度 | ⭐⭐⭐⭐⭐ 新项目首选,老项目可无缝迁移 |
对比 Moment.js | 更小、更快、更现代,Moment.js 已停止维护 |
✅ 一句话总结
**
dayjs
是一个轻量、易用、高性能的 JavaScript 日期时间库,提供了与 Moment.js 类似的 API,但体积更小、更模块化,是现代前端/后端开发中处理日期时间的最佳选择之一。**