发布于 2026-01-06 5 阅读
0

使用 date-fns 格式化和修改 JavaScript 日期 为什么使用 date-fns? 入门 格式化 添加区域设置 添加和减去 计算两个日期之间的天数 结论 由 Mux 呈现的 DEV 全球展示挑战赛:展示你的项目!

使用 date-fns 格式化和修改 JavaScript 日期

为什么需要 date-fns?

入门

格式化

添加区域设置

加法和减法

计算两个日期之间的天数

结论

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

在 JavaScript 中操作日期似乎是一项艰巨的任务。原生Date()对象对新手不太友好,即使是格式化这样简单的任务也需要大量的工作。

目前,JavaScript 日期管理库领域主要有两个竞争对手:MomentJSDate-FNS

为什么需要 date-fns?

这两个库都能完成任务,它们允许你获取Date对象并进行格式化、添加时间、减去时间等等。然而,两者之间存在一个明显的核心区别,这可能会成为你未来项目中的一个卖点。

Date-fns 采用模块化设计,这意味着您只需导入所需功能,从而避免最终打包的文件体积过大。这看似无关紧要,但如果您仅仅为了一个简单的格式化函数而导入整个 MomentJS 库,那就未必是您想要的了。

它还是不可变的,这意味着对于每个函数,你总是会得到一个 Date对象。这使得调试变得轻而易举。

文档非常清晰简洁,每个函数都有明确的使用示例。您可以在这里查看:date-fns文档

入门

让我们直接进入正题,将 date-fns 导入到一个入门项目中。

# If you use NPM
npm install date-fns

# If you use YARN
yarn add date-fns

注意:如果您正在阅读本文并且不想使用包管理器,您可以导入整个库,<script src="http://cdn.date-fns.org/VERSION/date_fns.min.js"></script>但您将无法只导入您想要/需要的模块。

另外,请记住,当通过在线编辑器(例如 .txt 文件)使用date-fns时,您需要通过对象来调用函数,而不是像本文中那样直接调用函数。 例如:<script>CodeSandboxdateFns
dateFns.addDays()

将库添加到项目后,就可以转到 JavaScript 文件并开始导入函数了!

格式化

在使用 JavaScript 处理日期时,格式化是必不可少的,所以我们首先要解决这个问题。

format通过调用以下代码将函数导入到您的文件中:

import { format } from 'date-fns';

或者,如果您正在开发一个 NodeJS 项目:

const { format } = require('date-fns');

提示:如果您还不知道,导入括号之间的部分允许我们将函数{ format }导入到您的文件中,因此您实际上只引入此文件将使用的函数!format

让我们创建一个新的日期来使用:const newYears = new Date(2019, 1, 1);,这将给我们一个常量,newYears其中包含 2019 年 1 月 1 日的原生 JS 日期。

现在让我们把这个日期格式化为 MM/DD/YYYY 格式。

const newYears = new Date('2019/01/01');
const formattedDate = format(newYears, 'MM/DD/YYYY');
console.log(formattedDate);

运行此命令并查看控制台输出,您会发现已返回格式化的字符串。01/01/2019

等等,就这些?没错!Date-fns 让格式化变得超级简单!

如果您想查看不同的格式化选项,请查看format 函数的官方文档以获取完整参考。

添加区域设置

好的,格式化是一项非常简单的任务。但date-fns还支持一种简单的方法来本地化格式化后的日期输出。

让我们沿用之前的例子,并将其更改为法语语言环境,采用完整的月份名称格式。我们只需要指定require语言环境,并将其传递给 format 选项。该选项接受一个可选的第三个参数,用于指定选项对象。

const newYears = new Date('2019/01/01');
const frenchLocale = require('date-fns/locale/fr');

const formattedDate = format(newYears, 'MMMM DD, YYYY', { locale: frenchLocale });
console.log(formattedDate);

太好了!现在的输出是janvier 01, 2019

加法和减法

现在我们知道了如何格式化日期,接下来让我们实际操作一下初始日期。

我们date-fns为每种类型的操作都编写了一个函数:

看出规律了吗?这里有很多加减运算函数可以使用。务必前往文档查看所有可用函数!

让我们沿用之前的例子,并加上一年,这样我们就以 2020 年为起点。

首先,将该函数添加addYears到我们的导入语句中。

import { format, addYears } from 'date-fns';

现在我们已经可以使用该函数了,我们可以将一年添加到基准日期,然后格式化输出。

let newYears = new Date('2019/01/01');
newYears = addYears(newYears, 1);

const formattedDate = format(newYears, 'MMMM DD, YYYY');
console.log(formattedDate);

现在的输出应该是:January 01, 2020

计算两个日期之间的天数

再来一个?这次我们来计算一下从新年第一天到圣诞节之间有多少天?

我们先来添加这个date-fns功能differenceInDays

import { format, addYears, differenceInDays } from 'date-fns';

现在我们只需要创建这两个日期,并将它们传递给函数:

const firstDay = new Date('2019/01/01');
const christmas = new Date('2019/12/24');

const daysBetween = differenceInDays(christmas, firstDay);
console.log(daysBetween); // Outputs => 357

结论

Date-fns 函数看起来可能很复杂,但实际上它是一种超级简单轻便的方式来处理所有日期计算!

额外小技巧:需要立即测试某个日期函数吗?浏览文档时打开开发者工具,即可通过dateFns对象立即使用所有函数。感谢Malinda M.指出这一点!

文章来源:https://dev.to/marinamosti/-formatting-and-modifying-javascript-dates-with-date-fns-3df2