使用Day.js在JavaScript中解析、验证、操作和显示日期和时间

来自菜鸟教程
跳转至:导航、​搜索

近一年前的最后一次发布,6 个月前的最近一次提交,以及数百个未解决的错误和拉取请求,Moment.js 似乎开始放缓,是时候购买了更积极维护的替代品。 插入 Day.js,这是一个 2kB 的极简日期和时间库,它提供了一个与 Moment.js 大致兼容的 API,以便于转换。

Day.js 入门

要在 Node.js 项目中开始使用 Day.js,只需使用 npmyarn 添加依赖项:

$ 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 表示全年,MMmm 分别表示月份和分钟。

当您想要包含不想转换为日期或时间部分的附加文本时,您可以用括号 [] “拥抱”字符串:

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,您还可以添加 monthyear 甚至基于时间的间隔,例如 hourminute

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 的绝佳替代品。

试试你的下一个项目,我知道我会的。