使用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 的绝佳替代品。
试试你的下一个项目,我知道我会的。