[toc]
| 单词 | 词性 | 音标 | 含义 |
|---|---|---|---|
| dayjs | n. | /ˈdeɪ dʒeɪ es/ | 轻量日期时间库,封装解析、格式化、加减、比较 |
| format | v. | /ˈfɔːmæt/ | 按指定格式输出时间字符串 |
| add | v. | /æd/ | 日期加法:向后加,如 add(7, 'day') |
| subtract | v. | /səbˈtrækt/ | 日期减法:向前减,如 subtract(1, 'month') |
| diff | v. | /dɪf/ | 计算两个日期的差值,如相差多少天 |
| isBefore | v. | /ɪz bɪˈfɔː(r)/ | 判断某个日期是否在另一个日期之前 |
| ISO | n. | /ˌaɪ es ˈəʊ/ | 国际标准时间字符串格式(如 2026-09-29T10:30:00.000Z) |
Lecture17-dayjs 日期时间处理
1、本节讲什么
学会用 dayjs 处理日期时间:格式化、解析、加减、比较。日期是最容易出 Bug 的地方(时区、格式、类型),用库能少踩很多坑。
2、概念速览
什么是 dayjs:一个超轻量的日期时间工具库。JS 自带的 Date 对象操作麻烦、易出错,dayjs 把常用的都封装好了。
类比 Java:相当于 Java 8 的 LocalDate / DateTimeFormatter——解析、格式化、加减都一行搞定。
正确 vs 误区:别用字符串拼日期(2025-01- + 月,容易出错);一律用 dayjs 解析再格式化。日期是"对象",不是"字符串"。
3、先看效果
npm install dayjs
import dayjs from 'dayjs'
// 1. 格式化:把时间按你的格式输出
dayjs().format('YYYY-MM-DD HH:mm:ss') // 现在:2026-09-29 10:30:00
dayjs('2025-01-01').format('YYYY年MM月DD日') // 2025年01月01日
// 2. 加减:加 7 天、减 1 个月
dayjs().add(7, 'day').format('YYYY-MM-DD')
dayjs().subtract(1, 'month').format('YYYY-MM-DD')
// 3. 比较:哪个更早 / 相差多少天
dayjs('2025-01-01').isBefore('2025-02-01') // true
dayjs('2025-02-10').diff('2025-02-01', 'day') // 9
4、照着做
- 安装 dayjs,跑上面三段,看输出。
- 场景练习:把后端返回的
"2026-09-29T10:30:00"格式化成"2026年09月29日"。 - 场景练习:算两个日期相差多少天(比如活动还剩几天)。
const start = dayjs('2026-10-01')
const now = dayjs()
const daysLeft = start.diff(now, 'day')
console.log(`距国庆还有 ${daysLeft} 天`)
5、常见疑问
- Q:后端返回的日期常常是
"2026-09-29T10:30:00.000Z"这种,怎么办? A:直接dayjs('2026-09-29T10:30:00.000Z')解析,再.format('YYYY-MM-DD HH:mm')。dayjs 认识标准 ISO 字符串。 - Q:
.add(7, 'day')第二个参数还有啥? A:'day'(天)、'week'(周)、'month'(月)、'year'(年)、'hour'、'minute'等。按需用。 - Q:表格里显示日期用什么?
A:后端给原始时间 → 前端
dayjs(x).format('YYYY-MM-DD HH:mm')再显示。别把原始 ISO 字符串直接怼到页面上。 - Q:不会用某个方法怎么办? A:告诉 AI"把 xxx 时间格式化成 yyyy-MM-dd",它会用 dayjs 写好。你只要知道"日期要用 dayjs、别手拼"。
6、规范要点
- 所有日期格式化统一用 dayjs,别手拼字符串、别在多个地方写不同格式。
- 可把常用格式封装成函数(如
formatTime()),全项目复用。 - 时间字段的类型:接口里日期类型用
string(配合interface定义,第 6 节)。
7、本节验证
- 会用 dayjs().format('YYYY-MM-DD HH:mm:ss') 格式化时间 ✅
- 会用 add / subtract 做日期加减 ✅
- 会用 isBefore / diff 做日期比较与相差天数 ✅
- 知道日期一律用 dayjs 解析,不用字符串手拼 ✅