Day.js 核心功能与 API 使用指南

作者:闭包旅人时间:2026-10-31 12:25:48浏览:420

Day.js 是一款极简且高效的 JavaScript 日期处理库,压缩后仅约 2 KB。本文详细介绍其安装方式、核心 API 及常用功能,包括日期解析、格式化输出、时区处理、国际化支持以及日期间的加减与比较操作,并提供 Unix 时间戳与 ISO 8601 格式转换示例,帮助开发者快速掌握并应用于 Web 或 Node.js 项目。

标题存在部分重复,敬请谅解。

优势分析:

  • 易于上手:Day.js 的 API 设计简洁直观,学习成本低。它提供了丰富的日期操作接口和格式化选项,让日期与时间的处理既灵活又便捷。

  • 体积小巧:压缩后的 Day.js 库大小仅约 2 KB,属于极轻量的日期处理方案。这有助于显著优化网页加载速度,尤其在移动端设备上表现更佳。

  • 零依赖:作为独立的日期库,Day.js 不依赖任何第三方库。这简化了项目集成过程,无需担心与其他库的版本冲突或兼容性问题。

  • 时区支持:内置时区处理能力,可轻松应对不同时区的日期时间转换。这对于开发国际化应用至关重要,能有效降低时区处理的复杂度。

  • 插件生态:拥有完善的插件生态系统,可通过插件扩展功能,如日期范围选择、日历展示等,满足多样化项目需求。

局限性:

  • 功能相对基础:相较于某些大型日期库,Day.js 的功能集较为精简。它可能不支持某些复杂的日期运算、比较或范围计算逻辑,处理复杂日期逻辑时可能需要额外编码。

  • 社区规模较小:相比主流大型日期库,Day.js 的社区活跃度与支持资源相对较少。遇到问题时,获取即时且全面解决方案的难度可能略高。

  • 格式化选项有限:虽然提供了常用时间格式化选项,但相比其他库,其格式化的灵活性稍显不足,可能限制某些特定格式化场景的需求。

下文将深入解析 Day.js 的具体用法,并附带代码示例及多种事件格式转换方法。

安装与基础使用

可通过 npm 或 yarn 命令进行安装:

# 使用 npm
$ npm install dayjs

# 使用 yarn
$ yarn add dayjs

在代码中引入 Day.js:

import dayjs from 'dayjs';

或者采用 CommonJS 方式:

const dayjs = require('dayjs');

调用 dayjs() 函数即可创建 Day.js 实例,随后即可利用该实例执行各类日期操作。

const now = dayjs();  // 创建一个 Day.js 实例,表示当前时间
console.log(now.format('YYYY-MM-DD'));  // 输出当前日期,格式为"YYYY-MM-DD"

Day.js 提供了便捷的 API 用于日期操作,例如增减天数、小时或分钟等。

console.log(now.add(1, 'day').format('YYYY-MM-DD'));  // 加一天
console.log(now.subtract(1, 'week').format('YYYY-MM-DD'));  // 减一周
console.log(now.startOf('month').format('YYYY-MM-DD'));  // 月初日期
console.log(now.endOf('month').format('YYYY-MM-DD'));  // 月末日期

Day.js 还支持对多个日期进行综合操作,例如计算两个日期之间的天数差:

const start = dayjs('2022-01-01');
const end = dayjs('2022-01-10');
console.log(end.diff(start, 'day'));  // 输出10,表示两个日期之间的天数差

解析日期:

const date = dayjs('2022-01-01');

格式化日期:

const formattedDate = date.format('YYYY-MM-DD');

获取当前日期:

const currentDate = dayjs();

增加日期:

const newDate = date.add(1, 'day');

减少日期:

const newDate = date.subtract(1, 'day');

比较日期:

const isAfter = date1.isAfter(date2);
const isBefore = date1.isBefore(date2);
const isSame = date1.isSame(date2);

获取日期之间的差异:

const diff = date1.diff(date2, 'day');

获取日期的某个部分:

const year = date.year();
const month = date.month();
const day = date.date();
const hour = date.hour();
const minute = date.minute();
const second = date.second();

设置日期的某个部分:

const newDate = date.year(2023).month(1).date(1);

本地化显示日期:

import localizedFormat from 'dayjs/plugin/localizedFormat';
import 'dayjs/locale/zh-cn';

dayjs.extend(localizedFormat);
dayjs.locale('zh-cn');

const formattedDate = date.format('LL');

格式化日期

Day.js 通过 format() 方法实现日期格式化,其字符串模板语法类似于 Moment.js,用于定义输出格式。

以下列举常用模板字符串:

  • - YYYY:4 位年份,例如 2022
  • - MMMM:月份全称,例如 January
  • - MMM:月份缩写,例如 Jan
  • - DD:2 位日期,例如 01
  • - dddd:星期全称,例如 Sunday
  • - ddd:星期缩写,例如 Sun
  • - HH:24 小时制小时数,例如 08
  • - hh:12 小时制小时数,例如 08
  • - mm:分钟数,例如 01
  • - ss:秒数,例如 01
console.log(now.format('YYYY-MM-DD'));  // 输出当前日期,格式为"YYYY-MM-DD"
console.log(now.format('YYYY-MM-DD HH:mm:ss'));  // 输出当前日期和时间,格式为"YYYY-MM-DD HH:mm:ss"
console.log(now.format('YYYY年M月D日 dddd'));  // 输出当前日期,格式为"YYYY年M月D日 dddd"
// 格式化为相对时间(如:几秒前、几分钟前)
dayjs.duration(60, 'seconds').humanize(); // "a minute"

// 格式化为时:分:秒
dayjs.duration(3661, 'seconds').format('H:mm:ss'); // "1:01:01"

// 格式化为天
dayjs.duration(2, 'days').asDays(); // 2

Day.js 还支持自定义格式化函数,可通过传入回调函数来自定义日期格式。

const customFormat = dayjs('2022-01-01').format(function () {
  return 'Happy New Year!';
});
console.log(customFormat);  // 输出"Happy New Year!"
// 转换为 Unix 时间戳
dayjs().unix();

// 转换为 JavaScript Date 对象
dayjs().toDate();

// 转换为 ISO 8601 格式的字符串
dayjs().toISOString();

日期解析

Day.js 支持解析多种常见日期格式,涵盖 ISO 8601 标准及各类本地格式。

const date = dayjs('2022-01-01');
console.log(date.format('YYYY-MM-DD'));  // 输出"2022-01-01"
// 转换为 Unix 时间戳
dayjs().unix();

// 转换为 JavaScript Date 对象
dayjs().toDate();

// 转换为 ISO 8601 格式的字符串
dayjs().toISOString();

此外,Day.js 还支持解析 Unix 时间戳。

const unixTimestamp = 1640995200;  // Unix 时间戳
const date = dayjs.unix(unixTimestamp);
console.log(date.format('YYYY-MM-DD'));  // 输出"2022-01-01"

国际化支持

Day.js 内置支持 66 种语言的国际化,便于在应用中切换不同语言。以下为常用国际化示例:

import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn'; // 导入中文语言包

// 设置语言为中文
dayjs.locale('zh-cn');

// 格式化日期
dayjs().format('dddd'); // "星期六"

日期比较

Day.js 提供了比较日期大小的相关方法。

const date1 = dayjs('2022-01-01');
const date2 = dayjs('2022-01-02');
console.log(date1.isBefore(date2));  // 输出 true,表示 date1 在 date2 之前
console.log(date1.isAfter(date2));  // 输出 false,表示 date1 在 date2 之后
console.log(date1.isSame(date2, 'day'));  // 输出 false,表示 date1 和 date2 不是同一天

日期格式化

Day.js 提供了格式化日期的方法,可将日期格式化为本地格式、UTC 格式或 ISO 8601 格式等。

将日期格式化为本地格式:

const date = dayjs('2022-01-01');
console.log(date.format('LL'));  // 输出 January 1, 2022

将日期格式化为 UTC 格式:

const date = dayjs('2022-01-01');
console.log(date.utc().format('YYYY-MM-DD HH:mm:ss'));  // 输出 2022-01-01 00:00:00

将日期格式化为 ISO 8601 格式:

const date = dayjs('2022-01-01');
console.log(date.toISOString());  // 输出 2022-01-01T00:00:00.000Z

时间格式的转换

Day.js 提供了转换不同事件格式的方法,例如将日期转换为 Unix 时间戳或 JavaScript Date 对象等。

将日期转换为 Unix 时间戳:

const date = dayjs('2022-01-01');
console.log(date.unix());  // 输出 1640995200

将日期转换为 JavaScript Date 对象:

const date = dayjs('2022-01-01');
console.log(date.toDate());  // 输出 Sat Jan 01 2022 00:00:00 GMT+0800 (China Standard Time)

将日期转换为 Moment.js 对象:

const date = dayjs('2022-01-01');
console.log(date.toDate());  // 输出 Moment<2022-01-01T00:00:00+08:00>

事件操作

Day.js 提供了操作日期的方法,包括增减天数、小时、分钟等。

加减天数:

const date = dayjs('2022-01-01');
console.log(date.add(1, 'day').format('YYYY-MM-DD'));  // 输出 2022-01-02
console.log(date.subtract(1, 'day').format('YYYY-MM-DD'));  // 输出 2021-12-31

比较两个日期的差异:

const date1 = dayjs('2022-01-01');
const date2 = dayjs('2022-01-10');
console.log(date)

总结:

Day.js 是一款轻量且易用的 JavaScript 日期库,具备强大的日期和时间处理能力。其 API 简洁,支持链式调用与不可变性。Day.js 支持国际化显示,并能解析和格式化各种日期时间格式。此外,它提供了丰富的插件系统,便于功能扩展。无论是 Web 开发还是 Node.js 环境,Day.js 均为理想选择。

本文关于 Day.js 常用方法的介绍到此结束,更多相关内容请查阅本站往期文章或继续浏览后续文章,感谢支持!

作者最新文章