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

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.xdnf.cn/news/19475.html

相关文章:

  • P2P技术应用:去中心化
  • Java全栈开发面试实战:从基础到微服务的全面解析
  • NAS Docker 安装N8N
  • 鸿蒙ArkTS 核心篇-18-@Builder 自定义构建函数
  • 上海交大具身导航中的感知智能、社会智能和运动智能全面综述
  • 数值分析——非线性方程与方程组的数值解法之二分法
  • APB协议​​ 构建一个完整的 ​​UVM验证VIP Agent介绍类的要素
  • 壁纸、logo、短视频去水印
  • 前端常见安全问题 + 防御方法 + 面试回答
  • Qt QML连接数据库如何解决重复创建连接问题
  • 大话 IOT 技术(3) -- MQTT篇
  • Qt中使用 GStreamer 播放视频文件
  • HikariCP vs DBCP2 vs Tomcat JDBC:多场景数据库连接池方案对比与实践指南
  • 局域网中使用Nginx部署https前端和后端
  • Qt中解析XML文件
  • word中插入字符后会自动删除后面的字符
  • Visual Studio Code中launch.json的解析笔记
  • Prometheus之启用--web.enable-remote-write-receiver
  • 对于一个多层感知机,参数初始化的时候不是已经把权重的范围根据方差进行优化过了,为什么还要进行正则化惩罚过大权重
  • springboot整合minio实现上传下载搭建minio
  • Unity转抖音小游戏重点摘记
  • 学生请假就餐系统
  • 计算机网络---http(超文本传输协议)
  • XPlayer播放器APP:安卓平台上的全能视频播放器
  • LeetCode每日一题,2025-8-31
  • TFS-2002《Analysis and Efficient Implementation of a Linguistic Fuzzy C-Means》
  • 【量化回测】backtracker整体架构和使用示例
  • Rsync 数据同步工具及实时同步配置
  • SAP PP中的MRP
  • 【OpenGL】LearnOpenGL学习笔记18 - Uniform缓冲对象UBO