引入
import dayjs from 'dayjs'
基本使用
day.js解析传入的参数,并返回Day.js对象
解析时间
// 不传参数直接调用 dayjs() 将返回一个包含当前日期和时间的 Day.js 对象。
dayjs()
// 等同于如下调用方式
dayjs(new Date())
// 传入时间字符串
dayjs('2024/02/01')
dayjs('2024/02/01 08:08:08')
// 传入毫秒时间戳(13位)
dayjs(1318781876406)
// 传入秒时间戳(10位)
dayjs.unix(1318781876)
// 传入Date对象
dayjs(new Date(2024, 1, 1))
通过.isValid()验证传入的参数是否能被解析成一个时间日期
dayjs('2024/02/01').isValid() // true
dayjs('invalud string').isValid() // false
获取
dayjs提供了一系列api来从dayjs对象中得到年月日、时分秒、周等信息。
// 获取年
dayjs().year() // 2024
// 获取月 0-11
dayjs().month() // 1
// 获取月份里的日期 1-31
dayjs().date() // 1
// 获取小时
dayjs().hour()
// 获取分钟
dayjs().minute()
// 获取秒
dayjs().second()
// 获取一周星期几 0(星期天)到6(星期六)
dayjs().day()
格式化
项目中对时间格式化是最常见的场景,dayjs返回的是dayjs对象,需要通过.format
方法来指定格式化的方式。
dayjs().format() // 2024-02-01T13:48:51+08:00
dayjs().format('YYYY-MM-DD') // 2024-02-01
dayjs().format('YYYY/MM/DD') // 2024/02/01
dayjs('2019-01-25').format('DD/MM/YYYY') // '25/01/2019'
支持的格式化占位符列表
占位符 | 输出 | 详情 |
---|---|---|
YY | 18 | 两位数的年份 |
YYYY | 2018 | 四位数的年份 |
M | 1-12 | 月份,从 1 开始 |
MM | 01-12 | 月份,两位数,从 1 开始 |
D | 1-31 | 月份里的一天 |
DD | 01-31 | 月份里的一天,两位数 |
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 | 秒 两位数 |
A | AM PM | |
a | am pm |
计算
有的时候需要增加add
、减少subtract
来获取一个新的时间
增加日期时间 add
返回增加一定时间的复制的 Day.js 对象
const a = dayjs()
const b = a.add(7, 'day')
// a -> the original value and will not change
// b -> the manipulation result
支持的单位列表
单位 | 缩写 | 详情 |
---|---|---|
day | d | 日 |
week | w | 周 |
month | M | 月 |
year | y | 年 |
hour | h | 小时 |
minute | m | 分钟 |
second | s | 秒 |
减少日期时间 subtract
返回减去一定时间的复制的 Day.js 对象
dayjs().subtract(7, 'year')
计算2个日期时间差 diff
要获得以毫秒
为单位的差异,请使用 dayjs.diff()
。
const date1 = dayjs('2019-01-25')
const date2 = dayjs('2018-06-05')
date1.diff(date2) // 20214000000 默认单位是毫秒
要获取其他单位
下的差异,则在第二个参数
传入相应的单位。
const date1 = dayjs('2019-01-25')
date1.diff('2018-06-05', 'month') // 7
获取开始日期时间 startOf
使用 startOf()
方法可以获取开始时间日期
// 今年一月1日上午 00:00
dayjs().startOf('year').format('YYYY-MM-DD mm:HH:ss') // '2024-01-01 00:00:00'
// 本月1日上午 00:00
dayjs().startOf('month').format('YYYY-MM-DD mm:HH:ss') // '2024-02-01 00:00:00'
// 本周的第一天上午 00:00
dayjs().startOf('week').format('YYYY-MM-DD mm:HH:ss') // '2024-01-28 00:00:00'
// 当天 00:00
dayjs().startOf('date').format('YYYY-MM-DD mm:HH:ss') // '2024-02-01 00:00:00'
// 当前时间,0 分、0 秒、0 毫秒
dayjs().startOf('hour').format('YYYY-MM-DD mm:HH:ss') // '2024-02-01 00:15:00'
// 当前时间,0 秒、0 毫秒
dayjs().startOf('minute').format('YYYY-MM-DD mm:HH:ss') // '2024-02-01 51:15:00'
获取结束日期时间 endOf
day.js 提供了endOf()
方法获取结束日期时间
// 今年一月1日上午 00:00
dayjs().endOf('year').format('YYYY-MM-DD mm:HH:ss') // '2024-12-31 59:23:59'
// 本月1日上午 00:00
dayjs().endOf('month').format('YYYY-MM-DD mm:HH:ss') // '2024-02-29 59:23:59'
// 本周的第一天上午 00:00
dayjs().endOf('week').format('YYYY-MM-DD mm:HH:ss') // '2024-02-03 59:23:59'
// 当天 00:00
dayjs().endOf('date').format('YYYY-MM-DD mm:HH:ss') // '2024-02-01 59:23:59'
// 当前时间,0 分、0 秒、0 毫秒
dayjs().endOf('hour').format('YYYY-MM-DD mm:HH:ss') // '2024-02-01 59:16:59'
// 当前时间,0 秒、0 毫秒
dayjs().endOf('minute').format('YYYY-MM-DD mm:HH:ss') // '2024-02-01 24:16:59'
endOf() 通常会和 startOf() 结合使用,这样就可以获取一个比较完整的时间段
比如要获取 2024年2月的开始和结束日期。
// 2024年2月开始日期时间
dayjs('2024-02').startOf('month').format('YYYY-MM-DD') //2024-02-01
// 2024年2月结束日期时间
dayjs('2024-02').endOf('month').format('YYYY-MM-DD') //2024-02-29
比较
isBefore
这表示 Day.js 对象是否在另一个提供的日期时间之前。
dayjs().isBefore(dayjs('2011-01-01')) // 默认毫秒 false
isSame
这表示 Day.js 对象是否和另一个提供的日期时间相同。
dayjs().isSame(dayjs('2011-01-01')) // 默认毫秒
isAfter
这表示 Day.js 对象是否在另一个提供的日期时间之后。
dayjs().isAfter(dayjs('2011-01-01')) // 默认毫秒
isLeapYear
查询 Day.js 对象的年份是否是闰年。
import isLeapYear from 'dayjs/plugin/isLeapYear'
dayjs.extend(isLeapYear)
dayjs('2000-01-01').isLeapYear() // true
高级操作
距今过去多久
1、通过relativeTim
e插件可以获取一个时间距今多久,或距未来某个时间多久;
2、通过updateLocale
插件来自定义输出格式
import relativeTime from 'dayjs/plugin/relativeTime'
dayjs.extend(relativeTime)
import updateLocale from 'dayjs/plugin/updateLocale'
dayjs.extend(updateLocale)
dayjs.updateLocale('en', {
relativeTime: {
future: '%s内',
past: '%s前',
s: '几秒',
m: '1分钟',
mm: '%d分钟',
h: '1小时',
hh: '%d小时',
d: '1天',
dd: '%d天',
M: '1个月',
MM: '%d个月',
y: '1年',
yy: '%d年'
}
})
dayjs('1999-08-01').fromNow() // 25 年前
dayjs('1999-08-01').fromNow(true) // 25 年
dayjs('2022-08-01').fromNow() // 2 年前
// 某个日期到当前时间的相对时间from
const a = dayjs('2000-01-01')
dayjs('1999-01-01').from(a) // 1 年前
// 当前实例到现在的相对时间 toNow
dayjs('1999-01-01').toNow() // 24 年内
// 某个日期到当前日期的相对时间 to
const a = dayjs('2000-01-01')
dayjs('1999-01-01').to(a) // 1 年内
获取当前日期是该年的第几天
import dayOfYear from 'dayjs/plugin/dayOfYear'
dayjs.extend(dayOfYear)
// 2023-8-10 是2023年的第 222 天
dayjs().dayOfYear() //222