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代表周一开始


浙公网安备 33010602011771号