使用date-fns在JavaScript中处理日期
处理日期并不是一件容易的事情。但是,date-fns
包使得在JavaScript中处理日期变得更加容易。
让我们深入了解一下date-fns
包,使我们的生活比以前更加轻松。这个date-fns
包非常轻量级。
安装包
我们需要使用npm来设置项目以使用第三方包。让我们快速看一下完成设置的步骤。
我假设你已经有了NodeJS installed或IDE来练习。
- 导航到您想要工作的目录。
- 运行命令
npm init
来初始化项目。 - 根据您的偏好回答所有问题。
- 现在,使用以下命令安装
date-fns
npm install date-fns
- 创建一个名为
dateFunctions.js
的文件
现在,我们准备好使用date-fns
包了。让我们去学习一些该包中的重要方法。
isValid
并非所有日期都是有效的。
例如,没有像2021-02-30
这样的日期。我们如何检查日期是否有效?
来自date-fns
包的isValid
方法将帮助我们找出给定日期是否有效。
检查以下代码是否与日期的有效性一起运行良好。
const { isValid } = require("date-fns");
console.log(isValid(new Date("2021, 02, 30")));
如果执行上述代码,您将发现2021年2月30日
是有效的。哦!它不是。
为什么会这样?
JavaScript将二月的额外一天转换为有效日期2021年3月1日
。为了确认它,请将new Date("2021, 02, 30")
打印到控制台。
console.log(new Date("2021, 02, 30"));
date-fns
包提供了一个名为parse
的方法来解决这个问题。方法parse
解析您提供的日期并返回准确的结果。
看一下下面的代码。
const { isValid, parse } = require("date-fns");
const invalidDate = parse("30.02.2021", "dd.MM.yyyy", new Date());
const validDate = parse("25.03.2021", "dd.MM.yyyy", new Date());
console.log(isValid(invalidDate));
console.log(isValid(validDate));
format
在处理日期时,其中一个基本用法是按照我们的要求对其进行格式化。我们使用date-fns
包中的format
方法以不同的格式格式化日期。
将日期格式化为23-01-1993
、1993-01-23 10:43:55
、Tuesday, January 23rd 1993
等等。运行以下代码以获取相应格式的日期。
const { format } = require("date-fns");
console.log(format(new Date(), "dd-MM-yyyy"));
console.log(format(new Date(), "dd/MM/yyyy HH:mm:ss"));
console.log(format(new Date(), "PPPP"));
您可以在此处找到完整的格式列表here。
addDays
addDays
方法用于设置一个在若干天后的最后期限。
简单地说,我们可以在任何日期上添加若干天以获取若干天后的日期。它有很多应用。
假设您在X天后有一个生日,而在这些天里您很忙。在繁忙的日程中,您可能记不住生日。您可以简单地使用addDays
方法在X天后通知您生日。以下是代码。
const { format, addDays } = require("date-fns");
const today = new Date();
// X天后的生日
const birthday = addDays(today, 6);
console.log(format(today, "PPPP"));
console.log(format(birthday, "PPPP"));
与addDays
方法类似,还有其他方法,如addHours
,subHours
,addMinutes
,subMinutes
,addSeconds
,subSeconds
,subDays
,addWeeks
,subWeeks
,addYears
,subYears
等等,您可以通过它们的名称轻松猜出这些方法的功能。
试试它们。
formatDistance
从头开始编写比较日期的代码是一场噩梦。我们为什么要比较日期呢?
在许多应用程序中,您会看到日期比较。如果您访问社交媒体网站,会有一个标语,例如1分钟前,12小时前,1天前等等。在这里,我们使用帖子的日期和时间与当前日期和时间进行比较。
方法formatDistance
执行相同的操作。它返回给定两个日期之间的间隔。
让我们编写一个程序来查找您的年龄。
const { formatDistance } = require("date-fns");
const birthday = new Date("1956, 01, 28");
const presentDay = new Date();
console.log(`年龄:${formatDistance(presentDay, birthday)}`);
eachDayOfInterval
假设您需要查找接下来的X天的名称和日期。方法eachDayOfInterval
帮助我们找到开始日期和结束日期之间的日期。
让我们找出从今天开始的接下来的30天。
const { addDays, eachDayOfInterval, format } = require("date-fns");
const presentDay = new Date();
const after30Days = addDays(presentDay, 30);
const _30Days = eachDayOfInterval({ start: presentDay, end: after30Days });
_30Days.forEach((day) => {
console.log(format(day, "PPPP"));
});
max和min
方法max
和min
分别找到给定日期中的最大日期和最小日期。 date-fns
中的方法非常熟悉,很容易猜出这些方法的功能。让我们写一些代码。
const { min, max } = require("date-fns");
const _1 = new Date("1990, 04, 22");
const _2 = new Date("1990, 04, 23");
const _3 = new Date("1990, 04, 24");
const _4 = new Date("1990, 04, 25");
console.log(`最大值:${max([_1, _2, _3, _4])}`);
console.log(`最小值:${min([_1, _2, _3, _4])}`);
isEqual
您可以轻松猜出方法isEqual
的功能。正如您所想,方法isEqual
用于检查两个日期是否相等。请参阅下面的示例代码。
const { isEqual } = require("date-fns");
const _1 = new Date();
const _2 = new Date();
const _3 = new Date("1900, 03, 22");
console.log(isEqual(_1, _2));
console.log(isEqual(_2, _3));
console.log(isEqual(_3, _1));
结论
如果我们讨论date-fns
包中的每个方法,那么需要几天才能完成。学习任何包的最佳方法是熟悉其中的基本方法,然后阅读文档以获取进一步的信息。对于date-fns
包,也可以采用相同的场景。
您已经学习了本教程中的基本方法。在documentation中搜索特定用法,或考虑参加在线课程,如JavaScript, jQuery, and JSON。
编程愉快 👨💻