当前位置: 首页 > news >正文

dayjs ​JavaScript 时间日期处理库

dayjs 是一个非常轻量、简洁、易用且高性能的 ​JavaScript 时间日期处理库,它是为了替代更重的 Moment.js 而设计的,目标是提供 ​相似的 API,但体积更小、不可变(immutable)、模块化、更现代化


✅ 一、dayjs 是什么?

​**dayjs​ 是一个用于 ​解析、校验、操作和格式化日期/时间**​ 的 JavaScript 库,它的 API 设计风格和 Moment.js 几乎一致,但具有以下优势:

特性说明
✅ ​轻量级只有 ​~2KB (gzipped 后更小)​,远小于 Moment.js(约 200KB+)
✅ ​不可变(Immutable)​所有操作都返回新对象,不会修改原对象,更安全、更函数式
✅ ​模块化可按需引入插件,避免引入不必要的功能,保持体积最小化
✅ ​链式调用支持链式 API,使用直观、优雅
✅ ​浏览器 & Node.js 兼容可在前后端同时使用
✅ ​Moment.js 风格 API如果你熟悉 Moment.js,几乎可以零成本迁移到 Day.js

🔗 官方资源

  • GitHub(开源):​​ https://github.com/iamkun/dayjs
  • 官网文档:​​ https://day.js.org/
  • NPM 包:​​ https://www.npmjs.com/package/dayjs

✅ 二、安装 dayjs

使用 npm 或 yarn 安装: 

npm install dayjs
# 或
yarn add dayjs

✅ 三、基本使用(无需插件,开箱即用)

1. 引入 dayjs 

import dayjs from 'dayjs'

2. 获取当前时间 

const now = dayjs()
console.log(now.format()) // 输出当前时间,如:2024-06-20T12:00:00+08:00

3. 解析时间字符串 

const date = dayjs('2024-06-20')
console.log(date.format('YYYY-MM-DD')) // 2024-06-20

4. 格式化日期 

console.log(dayjs().format('YYYY年MM月DD日 HH:mm:ss'))
// 输出类似:2024年06月20日 14:05:30

✅ 四、常用 API 介绍

方法说明示例
​**dayjs()**​获取当前时间 / 创建 dayjs 对象dayjs()
​**dayjs('2024-06-01')**​从字符串解析时间dayjs('2024-06-01')
​**dayjs(1654321234000)**​从时间戳(毫秒)创建dayjs(1654321234000)
​**format('YYYY-MM-DD')**​格式化日期输出dayjs().format('YYYY/MM/DD') → '2024/06/20'
​**year()**​获取年份dayjs().year() → 如 2024
​**month()**​获取月份(0-11)dayjs().month() → 5(表示6月)
​**date()**​获取日(1-31)dayjs().date() → 如 20
​**hour() / minute() / second()**​时 / 分 / 秒dayjs().hour()
​**add(1, 'day')**​加 1 天dayjs().add(1, 'day')
​**subtract(1, 'month')**​减 1 个月dayjs().subtract(1, 'month')
​**isBefore() / isAfter() / isSame()**​比较日期dayjs().isAfter(anotherDay)
​**unix()**​获取时间戳(秒)dayjs().unix()
​**valueOf()**​获取时间戳(毫秒)dayjs().valueOf()

✅ 五、格式化符号(format 语法)

符号说明示例
YYYY4位数年份2024
YY2位数年份24
MM月份(01-12)06
M月份(1-12)6
DD日期(01-31)01
D日期(1-31)1
HH24小时制 小时(00-23)14
hh12小时制 小时(01-12)02
mm分钟(00-59)05
ss秒(00-59)30
A大写的 AM / PMPM
a小写的 am / pmpm

示例: 

dayjs().format('YYYY-MM-DD HH:mm:ss A') 
// 例如:2024-06-20 14:05:30 PM

✅ 六、插件系统(模块化功能扩展)

Day.js 的一个非常强大的特性是:​默认只包含基础功能,其他功能(如时区、相对时间、周数等)需要通过插件引入,保持核心体积极小。​

1. 引入插件方式 

import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'         // UTC 时间
import timezone from 'dayjs/plugin/timezone' // 时区
import relativeTime from 'dayjs/plugin/relativeTime' // 相对时间:2天前
import weekOfYear from 'dayjs/plugin/weekOfYear' // 获取第几周// 使用插件
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(relativeTime)
dayjs.extend(weekOfYear)

📦 所有插件需要单独安装(但大部分已内置在 dayjs ecosystem,可通过 npm 获取):

npm install dayjs
# 插件一般随着 dayjs 自动可用,无需再装,但有些高级功能可能需要

2. 常用插件介绍

插件功能说明
​**utc**​支持 UTC 时间dayjs.utc()
​**timezone**​支持时区转换需要先引入 utc
​**relativeTime**​相对时间格式化如:2天前3小时后
​**weekOfYear**​获取一年中的第几周dayjs().week()
​**isLeapYear**​判断闰年dayjs().isLeapYear()
​**quarterOfYear**​获取季度第几季度
​**customParseFormat**​支持自定义格式解析当你的日期字符串格式特殊时很有用

✅ 示例:使用相对时间插件 

# 安装(通常无需单独安装,插件已随 dayjs 提供)
npm install dayjs

 

import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'dayjs.extend(relativeTime)const now = dayjs()
const past = dayjs().subtract(2, 'day')console.log(past.fromNow()) // "2天前"
console.log(now.fromNow())  // "刚刚" 或 "几秒前"


✅ 七、与 Moment.js 对比

特性Day.jsMoment.js
体积~2KB,非常小~200KB,非常大
不可变性✅ 支持(推荐)❌ 默认可变(但也可不可变)
API 风格类似 Moment.js,易迁移原始设计
插件机制✅ 模块化,可按需引入❌ 功能全内置,体积大
维护状态✅ 活跃(推荐用于新项目)⚠️ 已停止维护(legacy)
链式调用✅ 支持✅ 支持
时区支持需插件 (timezone)内置但臃肿

✅ ​结论:新项目强烈推荐使用 Day.js,老项目如无必要不必迁移,但 Day.js 是更现代、更轻量的选择。​


✅ 八、总结

项目说明
dayjs 是什么?​一个轻量、现代、易用的 JavaScript ​日期时间处理库,API 类似 Moment.js,但更小、更快、更模块化
特点🟢 极小体积(~2KB)、🟢 不可变、🟢 链式调用、🟢 模块化插件、🟢 Moment.js 风格
适合谁用?​所有需要处理日期时间的 ​前端 / 后端 / 全栈项目,特别是追求性能和简洁的项目
推荐程度⭐⭐⭐⭐⭐ ​新项目首选,老项目可无缝迁移
对比 Moment.js更小、更快、更现代,Moment.js 已停止维护

✅ 一句话总结

​**dayjs 是一个轻量、易用、高性能的 JavaScript 日期时间库,提供了与 Moment.js 类似的 API,但体积更小、更模块化,是现代前端/后端开发中处理日期时间的最佳选择之一。​**​

http://www.dtcms.com/a/360532.html

相关文章:

  • 力扣hot100:轮转数组(常规思路与三步反转讲解)(189)
  • C#基础(②音乐播发器MCI(Media Control Interface))
  • CMake⼯程指南-3
  • 手写MyBatis第45弹:动态代理在MyBatis插件内核是如何织入扩展逻辑的
  • Linux软件升级方法总结
  • CF每日3题(1500-1600)
  • 在windows系统下安装Docker Desktop后迁移镜像位置
  • 科普:requirements.txt 和 environment.yml
  • 【系统分析师】高分论文:论面向服务方法在信息系统开发中的应用
  • 一些八股总结
  • Langflow Agents 技术深度分析
  • OpenCL C 平台与设备
  • (附源码)基于Vue的教师档案管理系统的设计与实现
  • 【开题答辩全过程】以 基于Java的网络购物平台设计与实现为例,包含答辩的问题和答案
  • LeetCode 3665. 统计镜子反射路径数目
  • react-virtualized React 应用中高效渲染大型列表和表格数据的库
  • Synchronized 概述
  • 【LeetCode】18、四数之和
  • LeeCode 37. 解数独
  • 并发编程——10 CyclicBarrier的源码分析
  • Selenium 等待机制:编写稳定可靠的自动化脚本
  • spi总线
  • 7.2elementplus的表单布局与模式
  • MCP SDK 学习二
  • 艾体宝案例 | 数据驱动破局:DOMO 如何重塑宠物零售门店的生存法则
  • Python 2025:AI代理、Rust与异步编程的新时代
  • 张柏芝亮相林家谦演唱会 再次演绎《任何天气》
  • Spring MVC 九大组件源码深度剖析(五):HandlerAdapter - 处理器的执行引擎
  • 三、环境搭建之Docker安装mysql
  • 一、计算机系统知识