使用date-fns在JavaScript中处理日期

处理日期并不是一件容易的事情。但是,date-fns包使得在JavaScript中处理日期变得更加容易。

让我们深入了解一下date-fns包,使我们的生活比以前更加轻松。这个date-fns包非常轻量级。

安装包

我们需要使用npm来设置项目以使用第三方包。让我们快速看一下完成设置的步骤。

我假设你已经有了NodeJS installedIDE来练习。

  • 导航到您想要工作的目录。
  • 运行命令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-19931993-01-23 10:43:55Tuesday, 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方法类似,还有其他方法,如addHourssubHoursaddMinutessubMinutesaddSecondssubSecondssubDaysaddWeekssubWeeksaddYearssubYears等等,您可以通过它们的名称轻松猜出这些方法的功能。

试试它们。

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

方法maxmin分别找到给定日期中的最大日期和最小日期。 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

编程愉快 👨‍💻

类似文章