Day.js
Day.js 是一个轻量级的 JavaScript 库,用于解析、验证、操作和显示日期和时间。它的 API 设计与 Moment.js 十分相似,但其大小仅为 2KB(gzip 压缩后),因此在性能和包大小方面具有明显优势。Day.js 是一个现代替代方案,适合那些需要高性能和小体积日期处理库的项目。
安装 Day.js
使用 npm 安装
npm install dayjs
使用 yarn 安装
yarn add dayjs
在浏览器中使用
通过 CDN 引入 Day.js:
<script src="https://unpkg.com/dayjs"></script>
基本用法
导入 Day.js
在 Node.js 或使用模块化的前端项目中,可以这样导入 Day.js:
const dayjs = require('dayjs'); // CommonJS
import dayjs from 'dayjs'; // ES6 Module
创建日期对象
使用 Day.js 创建日期对象非常简单,可以使用当前日期、指定日期字符串、时间戳等多种方式创建。
// 当前日期和时间
const now = dayjs();
// 指定日期字符串
const specificDate = dayjs('2023-06-25');
// 时间戳
const fromTimestamp = dayjs(1624896000000);
格式化日期
Day.js 提供了 format
方法将日期对象格式化为指定的字符串格式。
const now = dayjs();
console.log(now.format('YYYY-MM-DD')); // 输出: 2023-06-25
console.log(now.format('MMMM D, YYYY h:mm A')); // 输出: June 25, 2023 3:24 PM
解析日期
Day.js 可以解析多种格式的日期字符串,并将其转换为日期对象。
const date1 = dayjs('2023-06-25', 'YYYY-MM-DD');
const date2 = dayjs('25-06-2023', 'DD-MM-YYYY');
操作日期
Day.js 提供了许多方法来操作日期对象,例如加减天数、月数、年数等。
const now = dayjs();
// 加 7 天
const nextWeek = now.add(7, 'day');
// 减 1 个月
const lastMonth = now.subtract(1, 'month');
// 开始和结束时间
const startOfMonth = now.startOf('month');
const endOfMonth = now.endOf('month');
比较日期
Day.js 提供了多种比较日期的方法,可以方便地进行日期比较。
const date1 = dayjs('2023-06-25');
const date2 = dayjs('2023-07-01');
console.log(date1.isBefore(date2)); // 输出: true
console.log(date1.isAfter(date2)); // 输出: false
console.log(date1.isSame(date2)); // 输出: false
插件支持
Day.js 的核心非常小巧,但是可以通过插件来扩展其功能。常用插件包括时区支持、相对时间、ISO 8601 解析等。
安装插件
例如安装相对时间插件:
npm install dayjs-plugin-relativeTime
使用插件
使用插件时需要先加载并扩展 Day.js:
import dayjs from 'dayjs';
import relativeTime from 'dayjs-plugin-relativeTime';
dayjs.extend(relativeTime);
const now = dayjs();
const pastDate = dayjs('2023-06-20');
console.log(pastDate.from(now)); // 输出: 5 days ago
console.log(now.to(pastDate)); // 输出: in 5 days
常用功能示例
计算日期间隔
计算两个日期之间的间隔天数、月数或年数。
const start = dayjs('2023-01-01');
const end = dayjs('2023-06-25');
const days = end.diff(start, 'day'); // 175 天
const months = end.diff(start, 'month'); // 5 个月
const years = end.diff(start, 'year'); // 0 年
转换日期格式
将日期字符串从一种格式转换为另一种格式。
const dateStr = '25-06-2023';
const formattedDate = dayjs(dateStr, 'DD-MM-YYYY').format('YYYY/MM/DD');
console.log(formattedDate); // 输出: 2023/06/25
获取相对时间
获取相对时间描述,例如 “2 天前” 或 “刚刚”。
import dayjs from 'dayjs';
import relativeTime from 'dayjs-plugin-relativeTime';
dayjs.extend(relativeTime);
const now = dayjs();
const pastDate = dayjs('2023-06-20');
console.log(pastDate.from(now)); // 输出: 5 days ago
console.log(now.to(pastDate)); // 输出: in 5 days
处理时区
使用 Day.js 处理时区需要引入 timezone
插件和 utc
插件:
npm install dayjs-plugin-timezone dayjs-plugin-utc
然后在代码中使用:
import dayjs from 'dayjs';
import utc from 'dayjs-plugin-utc';
import timezone from 'dayjs-plugin-timezone';
dayjs.extend(utc);
dayjs.extend(timezone);
const now = dayjs();
const newYorkTime = now.tz('America/New_York');
console.log(newYorkTime.format()); // 输出: 2023-06-25T10:24:12-04:00
总结
Day.js 是一个轻量级、高性能的日期处理库,其 API 与 Moment.js 类似,便于迁移和使用。通过丰富的插件支持,Day.js 可以灵活地扩展功能,以满足各种日期和时间处理需求。如果你正在寻找一个小体积、快速的日期处理库,Day.js 是一个值得考虑的选择。