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'
格式化占位符如下:
占位符 | 输出 | 详情 |
---|---|---|
YY | 18 | 两位数的年份 |
YYYY | 2018 | 四位数的年份 |
M | 1-12 | 月份,从 1 开始 |
MM | 01-12 | 月份,两位数 |
MMM | Jan-Dec | 缩写的月份名称 |
MMMM | January-December | 完整的月份名称 |
D | 1-31 | 月份里的一天 |
DD | 01-31 | 月份里的一天,两位数 |
d | 0-6 | 一周中的一天,星期天是 0 |
dd | Su-Sa | 最简写的星期几 |
ddd | Sun-Sat | 简写的星期几 |
dddd | Sunday-Saturday | 星期几 |
H | 0-23 | 小时 |
HH | 00-23 | 小时,两位数 |
h | 1-12 | 小时, 12 小时制 |
hh | 01-12 | 小时, 12 小时制, 两位数 |
m | 0-59 | 分钟 |
mm | 00-59 | 分钟,两位数 |
s | 0-59 | 秒 |
ss | 00-59 | 秒 两位数 |
SSS | 000-999 | 毫秒 三位数 |
Z | +05:00 | UTC 的偏移量,±HH:mm |
ZZ | +0500 | UTC 的偏移量,±HHmm |
A | AM PM | |
a | am 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)