day.js实战

引入

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'


支持的格式化占位符列表

占位符输出详情
YY18两位数的年份
YYYY2018四位数的年份
M1-12月份,从 1 开始
MM01-12月份,两位数,从 1 开始
D1-31月份里的一天
DD01-31月份里的一天,两位数
H0-23小时
HH00-23小时,两位数
h1-12小时, 12 小时制
hh01-12小时, 12 小时制, 两位数
m0-59分钟
mm00-59分钟,两位数
s0-59
ss00-59秒 两位数
AAM PM
aam 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

支持的单位列表

单位缩写详情
dayd
weekw
monthM
yeary
hourh小时
minutem分钟
seconds
减少日期时间 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、通过relativeTime插件可以获取一个时间距今多久,或距未来某个时间多久;


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
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

k0933

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值