选型

  • Moment.js
    功能强大、使用广泛、中文文档详尽。不再维护,体积大,官方不推荐新项目使用。
  • Luxon
    是由Moment.js的原开发者编写。没有中文文档。资料少。star数量:13.6K
  • Date-fns
    支持 Tree shaking,可以根据需要进行按需引入。没有中文文档,资料少。star数量:31.1K
  • Day.js
    是一个轻量级的 JavaScript 日期库,提供了类似 Moment.js 的 API,并且体积更小。它支持链式操作、格式化和持续时间计算。Day.js 还提供了插件系统,可以根据需要扩展其功能。有中文文档。star数量:42.4K

image.png

Day.js常用API

let dayjs = require('dayjs')

// 1 format 格式化时间
console.log(dayjs('2018-04-04T16:00:00.000Z').format('YYYY-MM-DD HH:mm:ss'), 'format-format-format-format')

// 2 isValid 校验是否是一个合法的日期
var customParseFormat = require('dayjs/plugin/customParseFormat')
console.log(dayjs('2022-01-33').isValid(), '非严格isValid')
console.log(dayjs('xxx').isValid(), '非严格isValid')
dayjs.extend(customParseFormat)
console.log(dayjs('2022-02-31', 'YYYY-MM-DD', true).isValid(), '严格isValid')

// 3 day 获取或设置星期几。传入 number 从0(星期天)到6(星期六)。 如果超出这个范围,它会进位到其他周。
console.log(dayjs().day(), '获取今天是周几')
console.log(dayjs().day(3).format('YYYY-MM-DD'), '设置为周几')

// 4 add 几天后
console.log(dayjs().add(7, 'day').format('YYYY-MM-DD'), '几天后')

// 5 locale 实例改变语言 dayjs默认将一周的第一天是周日 周六是最后一天 将'zh-cn'作为参数传进去默认遵循中国地区
require('dayjs/locale/zh-cn')
console.log(dayjs().locale('zh-cn').startOf('week').format('YYYY-MM-DD'), 'startOf-startOf-startOf')
console.log(dayjs().startOf('week').format('YYYY-MM-DD'), 'startOf-startOf-startOf')

// 6 fromNow 距离现在相差多长时间
var relativeTime = require('dayjs/plugin/relativeTime')
dayjs.extend(relativeTime)
console.log(dayjs('1999-01-01').fromNow(true), 'fromNow-fromNow-fromNow')

// 7 diff 返回指定单位下两个日期时间之间的差异。
const diffDate1 = dayjs('2019-01-25')
const diffDate2 = dayjs('2018-06-05')
console.log(diffDate1.diff(diffDate2, 'month'), 'Difference-Difference-Difference')

// 8 valueOf 毫秒级时间戳
console.log(+dayjs('2019-01-25').valueOf(), 'Unix-Unix-Unix')

// 9 daysInMonth 月份中天数
console.log(dayjs('2019-02').daysInMonth(), 'daysInMonth-daysInMonth-daysInMonth')

// 10 toObject 返回包含时间信息的 Object。
var toObject = require('dayjs/plugin/toObject')
dayjs.extend(toObject)
console.log(dayjs('2023-03-06').toObject(), 'toObject-toObject-toObject')

// 11 isBefore Day.js对象是否在另一个提供的日期时间之前。
console.log(dayjs('2010').isBefore(dayjs('2011')), 'isBefore-isBefore-isBefore')

// 12 isBetween 表示 Day.js对象是否在其他两个的日期时间之间。
var isBetween = require('dayjs/plugin/isBetween')
dayjs.extend(isBetween)
console.log(dayjs('2010-10-18').isBetween('2010-10-19', dayjs('2010-10-25')), 'isBetween-isBetween-isBetween')

// 13 dayOfYear 表示 Dayjs的日期是年中第几天,或设置成是年中第几天。
var dayOfYear = require('dayjs/plugin/dayOfYear')
dayjs.extend(dayOfYear)
console.log(dayjs('2023-03-06').dayOfYear(), 'dayOfYear-dayOfYear-dayOfYear')
console.log(dayjs('2023').dayOfYear(65).format('YYYY-MM-DD'), 'dayOfYear-dayOfYear-dayOfYear')

// 14 QuarterOfYear 增加了 .quarter() API 返回当前实例是哪个季度
var quarterOfYear = require('dayjs/plugin/quarterOfYear')
dayjs.extend(quarterOfYear)

console.log(dayjs('2023-03-06').quarter())

mengyuhang4879
13 声望7 粉丝