为什么我推荐你使用 day.js

362 阅读4分钟

在现代的 Web 开发中,时间和日期处理是一个非常常见的任务。无论是在前端还是后端,我们经常需要处理日期、时间戳、时区等问题。而在 JavaScript 开发中,有一些库可以帮助我们轻松处理这些问题,其中之一就是 day.js

什么是 day.js?

day.js 是一个轻量级的 JavaScript 日期库,专门用于解决日期和时间的处理、格式化和解析。它的目标是提供一个小巧而强大的工具,以简化 JavaScript 中的日期操作。day.js 非常流行,因为它具有以下特点:

  • 轻量级:day.js 的体积非常小,这使得它在前端项目中非常适用,而不会增加页面加载时间。

  • 速度快:day.js 设计得非常高效,因此在执行日期操作时非常快速。与 moment.js 相比,它通常更快。

  • 可扩展性:day.js 支持插件,您可以根据需要扩展其功能。

  • 简单易用:day.js 的 API 设计非常直观和易于理解,使得它成为开发人员的首选。

day.js 的常用功能

day.js 提供了一系列强大的功能,使得处理日期和时间变得轻而易举。以下是 day.js 的一些常用功能:

1. 创建日期

您可以使用 day.js 来创建日期对象,如下所示:

const now = dayjs(); // 创建当前日期
const customDate = dayjs('2023-09-25'); // 创建指定日期

2. 格式化日期

day.js 允许您将日期格式化为各种字符串,以满足您的需求:

const formattedDate = now.format('YYYY-MM-DD HH:mm:ss'); // 格式化日期为 'YYYY-MM-DD HH:mm:ss'

3. 解析日期

您可以使用 day.js 解析字符串为日期对象:

const parsedDate = dayjs('2023-09-25 12:00:00', 'YYYY-MM-DD HH:mm:ss');

4. 计算日期差异

day.js 允许您轻松计算日期之间的差异,如天数、小时数等:

const diffInDays = customDate.diff(now, 'day'); // 计算两个日期之间的天数差异

5. 添加和减去时间

您可以对日期进行添加或减去指定的时间量:

const newDate = now.add(1, 'day'); // 添加一天
const newDate2 = now.subtract(2, 'hour'); // 减去两小时

6. 设置日期部分

您可以设置日期的年、月、日等部分:

const newYear = now.set('year', 2024); // 将年份设置为 2024

day.js 与 moment.js 的对比

在过去,moment.js 是 JavaScript 中处理日期和时间的最流行库之一。然而,随着时间的推移,它已经被停止维护,并且它的体积相对较大,这导致了性能问题。day.js 出现在这个背景下,它被认为是更好的替代品。下面是 day.js 和 moment.js 的对比,以及为什么 day.js 更值得推荐:

1. 大小

day.js 的文件大小非常小,通常比 moment.js 小得多。这对于前端项目来说非常重要,因为小文件可以加快页面加载速度。

2. 性能

day.js 被设计成非常高效,因此在处理大量日期操作时比 moment.js 更快。这对于需要大量日期处理的应用程序来说非常重要,例如日历或时间轴应用程序。

3. immutable

这一点非常重要,例如,你想生成一个包含最近7天时间的数组,可能会写成

const now = moment();

for (let i = 0; i < 7; i++) {
    console.log(now.add(i, 'day').format('YYYY-MM-DD'));
}

以为是连续7天,但实际上....从下图就可以看到,并不是这样。

image.png

这是因为在moment.js中,now对象是mutable的,因此每次调用add方法后,now对象都会被修改。这可能导致不希望的结果,因为我们期望now保持不变,只是生成一个新的日期。

同样的代码,我们用 day.js 看下效果

image.png

在day.js中,它是immutable的,每次调用add方法后,会返回一个新的day.js对象,而不会修改原始对象。这就确保了now对象的不变性。由此可以看到 immutable 的作用和价值。

结论

day.js 是一个现代、轻量级且高性能的 JavaScript 日期库,它提供了强大的日期和时间处理功能,同时避免了 moment.js 的一些问题。如果你正在开发前端项目并需要处理日期和时间,我强烈推荐使用 day.js。它不仅功能强大,而且体积小,性能出色,使其成为处理日期的理想选择。