使用Day.js在JavaScript中解析、验证、操作和显示日期和时间
近一年前的最后一次发布,6 个月前的最近一次提交,以及数百个未解决的错误和拉取请求,Moment.js 似乎开始放缓,是时候购买了更积极维护的替代品。 插入 Day.js,这是一个 2kB 的极简日期和时间库,它提供了一个与 Moment.js 大致兼容的 API,以便于转换。
Day.js 入门
要在 Node.js 项目中开始使用 Day.js,只需使用 npm 或 yarn 添加依赖项:
$ npm install dayjs --save # or $ yarn add dayjs
然后只需将其包含在您的脚本中:
const dayjs = require('dayjs');
Day.js 也适用于现代浏览器,可以自托管或通过 CDN 提供商(如 cdnjs)包含。
解析日期和时间
将日期和时间字符串解析为 Day.js 对象很容易,并且支持字符串、数字、原生 JavaScript Date 对象以及其他 Day.js 对象:
let date = dayjs('2019-12-27');
date = dayjs('20191227');
date = dayjs(new Date(2019, 11, 27));
date = dayjs(day('2019-12-27'));
您甚至可以完全省略字符串以将 Day.js 对象默认为当前日期和时间:
date = dayjs();
验证日期和时间
使用 Day.js 解析日期和时间后,您可以利用 isValid() 方法来确定您传入的内容是否实际上是 Day.js 可以解析的内容:
dayjs('2019-12-27').isValid(); // true
dayjs('tomorrow').isValid(); // false
此外,如果您要尝试显示一个带有无法解析的日期的 Day.js 对象,则返回将是 Invalid Date。
显示日期和时间
.format() 方法允许我们获取 Day.js 对象并将其转换为人类可读的字符串。 它支持您常用的日期和时间变量集,例如 YYYY 表示全年,MM 和 mm 分别表示月份和分钟。
当您想要包含不想转换为日期或时间部分的附加文本时,您可以用括号 [ 和 ] “拥抱”字符串:
dayjs().format('YYYY-MM-DD [at] HH:mm:ss');
dayjs().format('HH:mm:ss [on] YYYY-MM-DD');
操纵日期和时间
在上一节中,我们尝试传入字符串 tomorrow,它被认为是无效的日期。 为了能够获取明天的日期和时间,我们可以从今天的日期和时间开始,并为其添加一天:
dayjs().add(1, 'day').format('YYYY-MM-DD');
除了添加 day,您还可以添加 month 和 year 甚至基于时间的间隔,例如 hour 和 minute:
dayjs().add(1, 'hour').format('YYYY-MM-DD HH:mm:ss');
dayjs().add(30, 'minute').format('YYYY-MM-DD HH:mm:ss');
dayjs().add(3, 'month').format('YYYY-MM-DD HH:mm:ss');
dayjs().add(3, 'year').format('YYYY-MM-DD HH:mm:ss');
你甚至可以链接它来做一些事情,比如添加多个间隔:
dayjs().add(1, 'hour').add(30, 'minute').format('YYYY-MM-DD HH:mm:ss');
别担心,还有一种减法:
dayjs().subtract(4, 'hour').format('YYYY-MM-DD HH:mm:ss');
比较日期和时间
在开发过程中经常出现的更复杂的任务之一是日期和时间的比较。 Day.js 可以轻松提供诸如 isBefore() 和 isAfter() 之类的辅助方法:
const date1 = dayjs('2020-01-1');
const date2 = dayjs();
if (date1.isBefore(date2)) {
console.log('Date 1 falls before date 2');
}
else if (date1.isAfter(date2)) {
console.log('Date 2 falls before date 1');
}
else if (date1.isSame(date2)) {
console.log('Date 1 and date 2 are the same');
}
结论
凭借其熟悉的接口和主动维护(即使在假期期间),Day.js 似乎是 Moment.js 的绝佳替代品。
试试你的下一个项目,我知道我会的。