dayjs 笔记

1.介绍

  • 官方文档,Day.js是一个极简的JavaScript库,可以为现代浏览器解析、验证、操作和显示日期和时间
  • 相对于原生的js时间对象,dayjs兼容性,可用性都更强,例如时间字符串解析,格式化输出,时间步进,时长计算等常见需求都已封装可直接使用
  • 相对于moment.js,dayjs采用插件化的设计,核心包体积更小

2.显示

  • 格式化:format()方法,传入模板字符串对时间对象进行格式化输出,模板字符将被替换,其他字符会被原模原样输出
<script>
    // 初始化时间
    const dateStr = '2026-02-01 13:02:04'
    const now = dayjs(dateStr)
    // 常用
    console.log(now.format('YYYY-MM-DD HH:mm:ss')) //2026-02-01 13:02:04
    // 年
    console.log(now.format('YYYY')) //2026 4位数
    console.log(now.format('YY')) //26 2位数
    // 月
    console.log(now.format('MM')) //02 最少2位数
    console.log(now.format('M')) //2
    // 日
    console.log(now.format('DD')) //01 最少2位数
    console.log(now.format('D')) //1
    // 时
    console.log(now.format('HH')) //13 最少2位数 24小时制
    console.log(now.format('H')) //13 24小时制
    console.log(now.format('hh')) //01 最少2位数 12小时制
    console.log(now.format('h')) //1 12小时制
    // 分
    console.log(now.format('mm')) //02 分钟数 最少2位数
    console.log(now.format('m')) //2 分钟数 1位数
    // 秒
    console.log(now.format('ss')) //04 秒钟 最少2位数
    console.log(now.format('s')) //4 秒钟 1位数
    // 星期(结果和语言相关)
    console.log(now.format('dddd')) //Sunday
    console.log(now.format('ddd')) //Sun
</script>
  • 差异:diff(),返回指定单位下两个日期时间之间的差异(调用对象 - 参数一),默认毫秒,可使用第二个参数对结果进行转换,第三个参数可指的是否是浮动数,默认整数
<script>
    const date1 = dayjs('2026-03-24')
    const date2 = dayjs('2026-01-01')

    // 默认毫秒 = 调用对象 - 参数一
    console.log(date1.diff(date2))
    // 月
    console.log(date1.diff(date2, 'month')) // 2
    // 日
    console.log(date1.diff(date2, 'day')) // 82
</script>

3.取值与赋值

  • 在设计上 Day.js 的 getter 和 setter 使用了相同的 API,也就是说,不传参数调用方法即为 getter,调用并传入参数为 setter,相当于在原生js时间对象的基础上加了层语法糖
  • 注意!设置时间时,原对象的值不会发生变化,只会返回一个设置了新时间的对象
<script>
    // 初始化时间
    var now = dayjs()
    // 设置 年
    now = now.year(2027)
    // 设置 月(0-11)
    now = now.month(11)
    // 设置 日
    now = now.date(25)
    // 设置 时
    now = now.hour(8)
    // 设置 分
    now = now.minute(30)
    // 设置 秒
    now = now.second(0)
    // 输出结果
    console.log(now.format('YYYY-MM-DD HH:mm:ss')) //2027-12-25 08:30:00
    // 取值示例
    console.log(now.minute()) //30
    // 时间戳
    console.log(dayjs().valueOf()) //1774320861554
    console.log(new Date().getTime()) //1774320861554
</script>
  • 获取月天数:daysInMonth()
<script>
    // 输出2026年每月天数

    // 循环遍历1-12月
    for(var i=0;i<12;i++){
        // 打印
        console.log(`${i+1}: ${dayjs().month(i).daysInMonth()}`)
        // 1: 31
        // 2: 28
        // 3: 31
        // 4: 30
        // 5: 31
        // 6: 30
        // 7: 31
        // 8: 31
        // 9: 30
        // 10: 31
        // 11: 30
        // 12: 31
    }
</script>

4.操作

  • 时间步进:给定步进单位(year,month,date,hour, minute, second)和值(数值类型),返回一个最新的时间对象,不会改变调用对象的值
<script>
    // 当前时间
    console.log(dayjs().format('YYYY-MM-DD')) //2026-03-24

    // 加法
    console.log(dayjs().add(1, 'year').format('YYYY-MM-DD')) //2027-03-24
    console.log(dayjs().add(-1, 'year').format('YYYY-MM-DD')) //2025-03-24

    // 减法
    console.log(dayjs().subtract(1, 'year').format('YYYY-MM-DD')) //2025-03-24
    console.log(dayjs().subtract(-1, 'year').format('YYYY-MM-DD')) //2027-03-24
</script>
  • 边界时间:给定一个时间单位,返回该单位周期内的起始或者结束时间,例如给月份,则返回该月第一个天或者最后一天
<script>
    // 当前时间
    console.log(dayjs().format('YYYY-MM-DD HH:mm:ss dddd')) //2026-03-24 11:11:46 Tuesday(周二)

    // 年(重置年以下部分)
    console.log(dayjs().startOf('year').format('YYYY-MM-DD HH:mm:ss')) //22026-01-01 00:00:00
    // 月(重置月以下部分)
    console.log(dayjs().startOf('month').format('YYYY-MM-DD HH:mm:ss')) //2026-03-01 00:00:00
    // 日(重置日以下部分)
    console.log(dayjs().startOf('date').format('YYYY-MM-DD HH:mm:ss')) //2026-03-24 00:00:00
    // 星期
    console.log(dayjs().startOf('week').format('YYYY-MM-DD HH:mm:ss')) //2026-03-22 00:00:00(22号周日)

    // 年
    console.log(dayjs().endOf('year').format('YYYY-MM-DD HH:mm:ss')) //2026-12-31 23:59:59
    // 月
    console.log(dayjs().endOf('month').format('YYYY-MM-DD HH:mm:ss')) //2026-03-31 23:59:59
    // 日
    console.log(dayjs().endOf('date').format('YYYY-MM-DD HH:mm:ss')) //2026-03-24 23:59:59
    // 星期
    console.log(dayjs().endOf('week').format('YYYY-MM-DD HH:mm:ss')) //2026-03-28 23:59:59(28号周六)
</script>

5.国际化

  • dayjs默认是英文
<script>
    // 输出星期(周二)
    console.log(dayjs().format('YYYY-MM-DD dddd')) //2026-03-24 Tuesday
</script>
  • 切换成中文:引入中文插件,执行引用,一般来说,会用于格式化输出星期几
<script src="./libs/dayjs/dayjs.min.js"></script>
<!-- 引入语言文件 -->
<script src="./libs/dayjs/zh-cn.js"></script>
<script>
    // 使用声明该语言
    dayjs.locale('zh-cn')
    // 输出星期(周二)
    console.log(dayjs().format('YYYY-MM-DD dddd')) //2026-03-24 星期二
</script>
  • 该插件会暴漏一个dayjs_locale_zh_cn对象,可以模仿该对象自己写一个语言文件,详见自定义
    image

  • 从语言配置对象的 weekStart 属性来看,语言还决定了 周起始 是哪天,0代表周日开始,1代表周一开始

posted @ 2026-03-24 11:41  ---空白---  阅读(33)  评论(0)    收藏  举报