Skip to main content

Day.js 的常用方法

Day.js 是一个轻量的处理时间和日期的 JavaScript 库。

一、安装

浏览器环境:

<script src="path/to/dayjs/dayjs.min.js"></script>
<!-- 或使用 CDN 资源 -->
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>

通过 npm:

npm install dayjs

二、格式化

使用 format() 格式化日期/时间:

import dayjs from 'dayjs';

dayjs('2020-05-20').format('DD/MM/YYYY') // '20/05/2020'

格式化占位符如下:

占位符输出详情
YY18两位数的年份
YYYY2018四位数的年份
M1-12月份,从 1 开始
MM01-12月份,两位数
MMMJan-Dec缩写的月份名称
MMMMJanuary-December完整的月份名称
D1-31月份里的一天
DD01-31月份里的一天,两位数
d0-6一周中的一天,星期天是 0
ddSu-Sa最简写的星期几
dddSun-Sat简写的星期几
ddddSunday-Saturday星期几
H0-23小时
HH00-23小时,两位数
h1-12小时, 12 小时制
hh01-12小时, 12 小时制, 两位数
m0-59分钟
mm00-59分钟,两位数
s0-59
ss00-59秒 两位数
SSS000-999毫秒 三位数
Z+05:00UTC 的偏移量,±HH:mm
ZZ+0500UTC 的偏移量,±HHmm
AAM PM
aam pm

点击查看更多格式化占位符

三、日期类

1、获取当前日期

要获取诸如 2020-05-20 格式的日期,使用 dayjs 之前需要这样写:

const today = new Date()
const dd = String(today.getDate()).padStart(2, '0') // 日
const mm = String(today.getMonth() + 1).padStart(2, '0') // 月
const yyyy = today.getFullYear() // 年
const curDate = `${yyyy}-${mm}-${dd}`

console.log(curDate) // 2020-05-20

使用 dayjs 后:

const curDate = dayjs().format('YYYY-MM-DD')

console.log(curDate) // 2020-05-20

dayjs() 不传参则返回实时的 dayjs 对象,传参则返回指定时间的 dayjs 对象。

2、判断日期是否合法

使用 isValid 来判断日期是否合法:

dayjs('2020-05-20').isValid(); // true
dayjs('20').isValid(); // false

3、获取/设置年月日

使用 year()month()date() 分别来获取/设置日期的年、月、日:

dayjs().year()      // 2020
dayjs().year(2000) // 返回年份设为 2000 的 dayjs 对象,可通过 format(...) 解析

dayjs().month() // 5
dayjs().month(6)

dayjs().date() // 20
dayjs().date(10)

4、获取/设置星期

使用 day() 来获取/设置星期:

dayjs().day()   // 5

dayjs().day(0) // 设为周日

5、获取指定月份的天数

使用 daysInMonth() 获取指定月份的天数:

dayjs().daysInMonth()             // 31

dayjs('2020-02-02').daysInMonth() // 29

6、获取指定日期的开始/结尾

使用 startOf()endOf() 获取指定日期的第一/最后一个时间单位:

// 获取该月的第一天/最后一天,并以几号的格式返回
dayjs('2020-02-02').startOf('month').date() // 1
dayjs('2020-02-02').endOf('month').date() // 29

// 获取该月的第一天/最后一天,并以星期几的格式返回
dayjs('2020-02-02').startOf('month').day() // 6(星期六)
dayjs('2020-02-02').endOf('month').day() // 6

7、设置日期/时间单项增减

使用 add()subtract() 分别设置日期/时间的增减:

dayjs().add(1, 'month').format("YYYY-MM-DD")
// 2020-06-20

dayjs("2020-05-20 08:10:00").add(20, "minute").format('YYYY-MM-DD HH:mm:ss')
// 2020-05-20 08:30:00

dayjs().subtract(1, 'year').format("YYYY-MM-DD")
// 2019-05-20

8、判断两个日期是否相等

使用 isSame() 判断两个日期是否相等:

dayjs('2010-01-01').isSame('2010-05-20', 'year')  // true

dayjs().isSame('2010-05-20', 'year') // false

dayjs().isSame('2010-05-20') // false,不传参则比较至毫秒

9、判断是否在指定日期之前

使用 isBefore() 判断是否在指定日期之前,相当于 <isSameOrBefore() 则相当于 <=

dayjs('2020-05-20').isBefore('2020-05-21', 'date')       // true

dayjs('2020-05-20').isBefore('2020-05-20', 'date') // false

dayjs('2020-05-20').isBefore('2020-05-19', 'date') // false

注意,使用 isSameOrBefore() 需要引入 isSameOrBefore 插件:

import dayjs from 'dayjs';
import isSameOrBefore from 'dayjs/plugin/isSameOrBefore'
dayjs.extend(isSameOrBefore)


dayjs('2020-05-20').isSameOrBefore('2020-05-21', 'date') // true

dayjs('2020-05-20').isSameOrBefore('2020-05-20', 'date') // true

dayjs('2020-05-20').isSameOrBefore('2020-05-19', 'date') // false

10、判断是否在指定日期之后

使用 isAfter() 判断是否在指定日期之后,相当于 >isSameOrAfter() 则相当于 >=

dayjs('2020-05-20').isAfter('2020-05-21', 'date')       // false

dayjs('2020-05-20').isAfter('2020-05-20', 'date') // false

dayjs('2020-05-20').isAfter('2020-05-19', 'date') // true

注意,使用 isSameOrAfter() 需要引入 isSameOrAfter 插件:

import dayjs from 'dayjs';
import isSameOrAfter from 'dayjs/plugin/isSameOrAfter'
dayjs.extend(isSameOrAfter)


dayjs('2020-05-20').isSameOrAfter('2020-05-21', 'date') // false

dayjs('2020-05-20').isSameOrAfter('2020-05-20', 'date') // true

dayjs('2020-05-20').isSameOrAfter('2020-05-19', 'date') // true

11、判断是否在指定日期之间

使用 isBetween() 判断是否在两个指定日期之间,相当于 > && <

注意,使用 isBetween() 需要引入 isBetween 插件:

import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween'
dayjs.extend(isBetween)


dayjs('2020-05-20').isBetween('2020-05-19', '2020-05-21', 'date') // true

dayjs('2020-05-20').isBetween('2020-05-19', '2020-05-20', 'date') // false

dayjs('2020-05-20').isBetween('2020-05-20', '2020-05-20', 'date') // false

dayjs('2020-05-20').isBetween('2020-05-20', '2020-05-21', 'date') // false

四、时间类

1、获取当前时间

要获取诸如 12:34:56 格式的日期,使用 dayjs 之前需要这样写:

const today = new Date()
const HH = String(today.getHours()).padStart(2, '0') // 时
const mm = String(today.getMinutes()).padStart(2, '0') // 分
const ss = String(today.getSeconds()).padStart(2, '0') // 秒
const curDate = `${HH}:${mm}:${ss}`

console.log(curDate) // 12:34:56

使用 dayjs 后:

const curDate = dayjs().format('HH:mm:ss')

console.log(curDate) // 12:34:56

2、判断时间是否合法

使用 isValid 来判断日期是否合法。

注意需要先引入 customParseFormat 插件:

// 24小时制 时分秒
dayjs('12:34:56', 'HH:mm:ss', true).isValid() // true
dayjs('12:34:66', 'HH:mm:ss', true).isValid() // false
dayjs('23:34:56', 'HH:mm:ss', true).isValid() // true
dayjs('24:34:56', 'HH:mm:ss', true).isValid() // false

// 12小时制 时分秒
dayjs('12:34:56', 'hh:mm:ss', true).isValid() // true
dayjs('13:34:56', 'hh:mm:ss', true).isValid() // false

// 12小时制 时分
dayjs('12:34', 'hh:mm', true).isValid() // true
dayjs('12:34:56', 'hh:mm', true).isValid() // false

3、获取/设置时分秒

使用 hour()minute()second() 分别来获取/设置时间的时、分、秒:

dayjs().hour()      // 12
dayjs().hour(7) // 返回小时设为 7 的 dayjs 对象,可通过 format(...) 解析

dayjs().minute() // 34
dayjs().minute(7)

dayjs().second() // 56
dayjs().second(7)