这是什么库以及为什么需要它
Moment.js 和 Day.js 是两个用于 JavaScript 的强大库,专门用于处理日期和时间。它们解决了一个根本性问题:JavaScript 原生的 Date 对象在日常任务中极其不便。它不支持格式化、复杂的日期计算、解析不同格式的字符串以及处理时区,除非编写数十行代码。
Moment.js 长期以来一直是事实上的标准,但现在被视为“遗留项目”——其开发已冻结,由于体积庞大(约 300 KB),不建议用于新项目。取而代之的是 Day.js——一个轻量级(仅 2 KB)、快速的库,具有几乎相同的 API。Day.js 在大多数基本操作上与 Moment.js 完全兼容,便于迁移。
这两个库都提供:
- 从任意格式的字符串解析日期
- 将日期格式化为易读的字符串
- 操作(添加/减去天数、月份、年份)
- 日期比较(之前、之后、之间)
- 时区处理(通过插件)
- 本地化(支持不同语言和区域格式)
在本文中,我们将重点介绍 Day.js 作为现代替代方案,但所有示例也适用于 Moment.js,只需进行微小更改。
安装
对于 Node.js,通过 npm 或 yarn 进行安装。对于浏览器,可以使用 CDN。
安装 Day.js
# 通过 npmnpm install dayjs
# 通过 yarnyarn add dayjs安装 Moment.js
npm install moment
# 或yarn add moment在项目中引入
// Day.jsconst dayjs = require('dayjs');
// Moment.jsconst moment = require('moment');快速入门及代码示例
安装后,您可以立即开始处理日期。以下是一个展示基本功能的最小示例:
const dayjs = require('dayjs');
// 当前日期和时间const now = dayjs();console.log('现在:', now.format('DD.MM.YYYY HH:mm:ss'));
// 解析字符串const date = dayjs('2024-03-15');console.log('解析:', date.format('DD.MM.YYYY'));
// 操作const nextWeek = dayjs().add(7, 'day');console.log('一周后:', nextWeek.format('DD.MM.YYYY'));
// 日期之间的差异const diff = nextWeek.diff(now, 'day');console.log('天数差异:', diff);
// 比较console.log('今天更早吗?', now.isBefore(nextWeek)); // true主要方法/函数
1. dayjs() — 创建日期对象
功能: 创建一个表示特定时间点的 Day.js 对象。无参数时返回当前日期和时间。
参数:
date(可选)— 字符串、数字(时间戳)、Date 对象或其他 Day.js 对象format(可选)— 用于解析的格式字符串,如果 date 是字符串
工作代码示例:
// 当前日期const now = dayjs();
// 从字符串const fromString = dayjs('2024-12-31');
// 从时间戳(毫秒)const fromTimestamp = dayjs(1704067200000);
// 从 Date 对象const fromDate = dayjs(new Date(2024, 0, 1)); // 2024年1月1日
// 指定格式const customFormat = dayjs('31.12.2024', 'DD.MM.YYYY');
console.log(now.format()); // 2024-03-15T10:30:00+03:00console.log(customFormat.format('YYYY-MM-DD')); // 2024-12-312. format() — 日期格式化
功能: 将日期对象转换为指定格式的字符串。