Day.js:轻量级 JavaScript 日期处理库详解与实战指南

在现代前端开发中,处理日期与时间是一项常见需求。原生的 JavaScript Date 对象功能有限且 API 不够友好,这促使开发者大量采用第三方库来简化日期操作。Day.js 是其中一款备受欢迎的轻量级日期处理库,它以极简体积、与 Moment.js 兼容的 API 以及强大的日期时间处理能力,成为许多项目的优选工具。本文将全面介绍 Day.js 的特点、安装方式以及具体使用方法,帮助你快速上手这一实用库。

什么是 Day.js?

Day.js 是一个极简主义的 JavaScript 日期处理库,用于解析(parse)、验证(validate)、操作(manipulate)和显示日期与时间数据。它与 Moment.js API 设计非常相似,因此如果你熟悉 Moment.js 上手 Day.js 会非常快速。与 Moment.js 相比,Day.js 的核心库体积仅约 2KB,大大减少了对项目打包体积的影响,非常适合对性能和文件大小敏感的前端应用。

Day.js GitHub 地址:https://github.com/iamkun/dayjs

Day.js 的 API 是不可变的:所有对日期对象的操作都会返回新的实例,而不会改变原对象本身,这种设计可以有效减少难以察觉的 bugs。

为什么选择 Day.js?

  • 体积极小:核心库约 2KB,适合性能敏感项目。
  • API 友好:与 Moment.js 兼容,易于学习与迁移。
  • 不可变操作:避免数据意外变化,提高代码稳定性。
  • 支持国际化(I18n):可按需加载多语言。
  • 插件机制:可以通过插件扩展更多功能,如高级格式、UTC、时区等。

Day.js 的安装与引入

在现代模块化项目中(例如使用 Webpack、Vite、Rollup 等),你可以通过 npm 或 yarn 安装 Day.js:

npm install dayjs
# 或者使用 yarn
yarn add dayjs

然后在代码中引入:

import dayjs from 'dayjs';

如果在简单的网页项目中不使用打包工具,也可以直接通过 <script> 标签引入 CDN 版本:

<script src="https://unpkg.com/dayjs"></script>

这时全局会有一个 dayjs 对象可供使用。

Day.js 基本使用方法

创建日期对象

Day.js 可以接受多种格式的输入来创建日期对象:

const now = dayjs();                  // 当前时间
const fromString = dayjs('2025-12-25'); // 字符串格式
const fromDate = dayjs(new Date());     // 原生 Date 对象
const fromTimestamp = dayjs(1700000000000); // 时间戳

格式化日期

格式化是 Day.js 最常用的功能之一。使用 .format() 方法可以将日期对象格式化成字符串:

 
dayjs().format('YYYY-MM-DD');           // 例如:2025-12-25
dayjs().format('YYYY-MM-DD HH:mm:ss');  // 例如:2025-12-25 14:30:00

格式化的格式字符串支持多种占位符,例如 YYYY 表示年份,MM 表示月份,DD 表示日期等(详见官方文档)。

日期加减操作

Day.js 提供直观的链式调用来进行日期的加减操作:

 
dayjs().add(7, 'day');      // 当前日期加 7 天
dayjs().subtract(1, 'month'); // 当前日期减 1 个月

你还可以指定单位,例如 'year'、'hour'、'minute'等,这些单位不区分大小写。

获取与设置日期字段

Day.js 支持获取和设置日期字段,如年、月、日等:

const date = dayjs('2025-12-25');
console.log(date.year());      // 获取年份
console.log(date.month());     // 获取月份(从 0 计数)

设置字段也同样简单:

 
dayjs().set('year', 2026);

插件扩展功能

Day.js 的核心库非常轻量,但通过插件可以实现更多高级功能:

import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);

// 使用 UTC 模式
dayjs().utc().format();

常见插件还包括 advancedFormat、timezone、relativeTime 等,用于实现更复杂的时间处理场景。

实战示例:日历组件动态更新

假如你正在开发一个日历组件,需要显示当前月份并允许用户查看下个月:

 
function displayNextMonth(dateStr) {
  const current = dayjs(dateStr);
  const nextMonth = current.add(1, 'month');
  return nextMonth.format('YYYY-MM');
}

console.log(displayNextMonth('2025-12')); // 输出:2026-01

通过 Day.js 提供的链式 API,这种逻辑变得非常直观。

总结

Day.js 作为一款轻量级、兼容性好且功能强大的日期处理库,是现代前端开发处理时间与日期问题的优秀选择。它既能满足基本的日期格式化和计算需求,也能通过插件扩展实现更复杂的场景。无论是中小型项目还是性能敏感型应用,使用 Day.js 都能大大简化你的日期时间处理逻辑。

评论