npm dayjs 是一个轻量级的 JavaScript 库,它专注于时间处理,能够让开发者在处理时间的过程中更加方便快捷。
一、简介
在日常的开发中,我们经常需要对时间进行各种处理,例如格式化输出、计算时间之间的差值、获取当前时间等等。然而,JavaScript 的原生 Date 对象提供的方法比较有限,而且很难处理常见的时间格式。因此,社区中涌现了很多针对时间处理的库,而 Day.js 就是其中的一员。
Day.js 是一个轻量级的 JavaScript 时间库,它支持链式操作、自定义插件和 I18n。它采用了和 Moment.js 相似的 API 设计,但是 Day.js 仅有 2KB 左右的大小,是后者的 1/20 左右。
二、安装和使用 Day.js
Day.js 通过 npm 安装:
npm install dayjs
然后我们就可以在项目中使用 Day.js 了:
import dayjs from 'dayjs'
// 获取当前时间
const now = dayjs()
// 格式化输出
const formatted = now.format('YYYY-MM-DD HH:mm:ss')
console.log(formatted) // 2022-02-22 12:34:56
Day.js 的 API 设计非常友好,例如获取当前时间:
const now = dayjs()
now.year() // 获取当前年份
now.month() // 获取当前月份(从 0 开始)
now.date() // 获取当前月份的第几天
now.hour() // 获取当前小时
now.minute() // 获取当前分钟数
now.second() // 获取当前秒数
now.millisecond() // 获取当前毫秒数
三、格式化时间输出
Day.js 的最常用功能就是格式化时间输出了。通过 format 函数可以将时间按照指定的格式输出。
// 创建一个时间
const time = dayjs('2022-02-22T12:34:56')
// 格式化输出
const formatted = time.format('YYYY年MM月DD日 HH:mm:ss')
console.log(formatted) // 2022年02月22日 12:34:56
Day.js 支持的格式化参数非常丰富,包括:
- YY:年份(后两位)
- YYYY:年份(四位)
- M:月份(不补 0)
- MM:月份(补 0)
- D:日期(不补 0)
- DD:日期(补 0)
- H:小时(24 小时制、不补 0)
- HH:小时(24 小时制、补 0)
- h:小时(12 小时制、不补 0)
- hh:小时(12 小时制、补 0)
- m:分钟(不补 0)
- mm:分钟(补 0)
- s:秒钟(不补 0)
- ss:秒钟(补 0)
- SSS:毫秒
- A:上午或下午(大写)
- a:上午或下午(小写)
- dddd:星期几(完整的名称)
- ddd:星期几(缩写)
四、计算时间差值
Day.js 还支持计算时间之间的差值,并且可以按照一定的精度(如年、月、日、小时、分钟等)进行输出。
// 创建两个时间
const start = dayjs('2022-02-22T12:34:56')
const end = dayjs('2022-02-23T14:56:23')
// 计算差值
const diff = end.diff(start, 'hour')
console.log(diff) // 26
在上面的代码中,我们通过 diff 函数计算 start 和 end 之间的差值,并且指定了输出单位为小时。
五、自定义插件
Day.js 支持自定义插件,通过自定义插件可以扩展 Day.js 的功能。
例如,我们可以通过一个自定义插件来获取当前日期的 zodiac(属相):
// 定义一个插件
dayjs.extend({
zodiac: function () {
const year = this.year()
const startYear = 1900 // 起始年份
const zodiacs = ['鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪']
// 通过算法计算属相
return zodiacs[(year - startYear) % 12]
}
})
// 使用自定义插件
const now = dayjs()
console.log(now.zodiac()) // 狗
六、I18n
Day.js 支持多语言环境,内置了 13 种常见的语言环境,并且可以自定义语言环境。
例如,我们可以切换语言环境,并且使用自定义的语言环境:
// 切换语言环境
dayjs.locale('zh-cn')
// 自定义语言环境
dayjs.locale({
name: 'mylang',
weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
monthsShort: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_')
})
const now = dayjs()
console.log(now.format('YYYY年MM月DD日 dddd', { locale: 'mylang' })) // 2022年02月22日 周二
七、总结
npm dayjs 是一个功能完善、易用性高、轻量级的 JavaScript 时间处理库。它支持格式化输出、计算时间差值、自定义插件和 I18n,能够让开发者在处理时间的过程中更加方便快捷。同时,Day.js 的大小只有约 2KB 左右,是其他类似时间处理库大小的 1/20 左右,非常适合在前端项目中使用。