【JavaScript】详解Day.js:轻量级日期处理库的全面指南
文章目录
- 一、Day.js简介
- 1. 什么是Day.js?
- 2. 安装Day.js
- 二、Day.js的基本用法
- 1. 创建日期对象
- 2. 格式化日期
- 3. 解析日期字符串
- 4. 操作日期
- 5. 比较日期
- 三、Day.js的高级功能
- 1. 插件机制
- 2. 国际化支持
- 四、实际应用案例
- 1. 事件倒计时
- 2. 日历应用
在JavaScript开发中,处理日期和时间是一项常见而又复杂的任务。尽管JavaScript内置的
Date
对象提供了基本的日期和时间功能,但其使用起来并不够方便。为了解决这个问题,出现了许多第三方库,Day.js便是其中之一。Day.js是一款轻量级的日期处理库,以其简洁的API和小巧的体积而著称。本文将详细介绍Day.js的基本用法、高级功能和实际应用场景,帮助你在项目中高效地处理日期和时间。
一、Day.js简介
1. 什么是Day.js?
Day.js是一个轻量级的JavaScript日期库,兼具现代API和优秀的性能。它的API设计灵感来自于Moment.js,但相比之下,Day.js的体积更小,仅为2KB左右(压缩后和无依赖),非常适合在前端项目中使用。
2. 安装Day.js
你可以通过npm、yarn或直接使用CDN的方式来安装Day.js:
# 使用npm安装
npm install dayjs# 使用yarn安装
yarn add dayjs
或者直接在HTML文件中引入CDN链接:
<script src="https://unpkg.com/dayjs"></script>
二、Day.js的基本用法
1. 创建日期对象
使用Day.js创建日期对象非常简单,只需调用dayjs()
函数:
const dayjs = require('dayjs'); // 如果使用的是Node.js环境// 当前日期和时间
const now = dayjs();
console.log(now.toString());// 指定日期和时间
const specificDate = dayjs('2023-07-27');
console.log(specificDate.toString());
2. 格式化日期
Day.js提供了丰富的格式化功能,可以将日期对象转换为指定格式的字符串:
const date = dayjs();
console.log(date.format('YYYY-MM-DD')); // 输出:2024-07-27
console.log(date.format('YYYY年MM月DD日')); // 输出:2024年07月27日
console.log(date.format('HH:mm:ss')); // 输出:当前时间的时分秒
3. 解析日期字符串
你可以使用Day.js解析各种格式的日期字符串:
const date1 = dayjs('2024-07-27', 'YYYY-MM-DD');
console.log(date1.toString());const date2 = dayjs('27/07/2024', 'DD/MM/YYYY');
console.log(date2.toString());
4. 操作日期
Day.js支持各种日期操作,例如加减日期、设置日期等:
const date = dayjs();// 加减日期
const nextWeek = date.add(7, 'day');
console.log(nextWeek.format('YYYY-MM-DD'));const lastMonth = date.subtract(1, 'month');
console.log(lastMonth.format('YYYY-MM-DD'));// 设置日期
const setDate = date.set('year', 2025);
console.log(setDate.format('YYYY-MM-DD'));
5. 比较日期
Day.js提供了日期比较的方法,可以方便地进行日期的比较操作:
const date1 = dayjs('2024-07-27');
const date2 = dayjs('2024-08-01');console.log(date1.isBefore(date2)); // 输出:true
console.log(date1.isAfter(date2)); // 输出:false
console.log(date1.isSame(date2)); // 输出:false
三、Day.js的高级功能
1. 插件机制
Day.js具有高度的可扩展性,通过插件机制可以扩展其功能。以下是一些常用插件:
自定义解析和格式化
Day.js可以通过插件支持自定义解析和格式化:
const customParseFormat = require('dayjs/plugin/customParseFormat');
dayjs.extend(customParseFormat);const customDate = dayjs('27-07-2024', 'DD-MM-YYYY');
console.log(customDate.format('YYYY-MM-DD')); // 输出:2024-07-27
处理相对时间
使用relativeTime
插件,可以方便地处理相对时间:
const relativeTime = require('dayjs/plugin/relativeTime');
dayjs.extend(relativeTime);const date = dayjs().subtract(3, 'day');
console.log(date.fromNow()); // 输出:3天前
时间区间操作
duration
插件可以让你方便地进行时间区间的操作:
const duration = require('dayjs/plugin/duration');
dayjs.extend(duration);const dur = dayjs.duration({ hours: 2, minutes: 30 });
console.log(dur.asMinutes()); // 输出:150
2. 国际化支持
Day.js内置了多种语言包,可以方便地切换语言:
const locale = require('dayjs/locale/zh-cn');
dayjs.locale('zh-cn');const date = dayjs();
console.log(date.format('dddd, MMMM D, YYYY')); // 输出中文格式的日期
四、实际应用案例
1. 事件倒计时
利用Day.js可以轻松实现事件倒计时功能:
const eventDate = dayjs('2024-12-31');
const now = dayjs();
const diff = eventDate.diff(now);const duration = dayjs.duration(diff);
console.log(`距离事件还有 ${duration.months()} 个月 ${duration.days()} 天 ${duration.hours()} 小时 ${duration.minutes()} 分钟`);
2. 日历应用
Day.js可以用于构建一个简单的日历应用:
const startOfMonth = dayjs().startOf('month');
const endOfMonth = dayjs().endOf('month');console.log(`本月开始于 ${startOfMonth.format('YYYY-MM-DD')},结束于 ${endOfMonth.format('YYYY-MM-DD')}`);
推荐:JavaScript
相关文章:

【JavaScript】详解Day.js:轻量级日期处理库的全面指南
文章目录 一、Day.js简介1. 什么是Day.js?2. 安装Day.js 二、Day.js的基本用法1. 创建日期对象2. 格式化日期3. 解析日期字符串4. 操作日期5. 比较日期 三、Day.js的高级功能1. 插件机制2. 国际化支持 四、实际应用案例1. 事件倒计时2. 日历应用 在JavaScript开发中…...

AI算法与图像处理 | 吴恩达团队新作!多模态方向
本文来源公众号“AI算法与图像处理”,仅用于学术分享,侵权删,干货满满。 原文链接:吴恩达团队新作!多模态方向 研究评估了先进多模态基础模型在 10 个数据集上的多样本上下文学习,揭示了持续的性能提升。…...

云服务器Ubuntu18.04进行Nginx配置
云服务器镜像版本信息:Ubuntu 18.04 server 64bit,本文记录了在改版本镜像上安装Nginx,并介绍了Nginx配置文件目录,便于后面再次有需求时进行复习。 文章目录 Nginx的安装Nginx配置文件分析 Nginx的安装 1.执行下面命令进行安装…...

SQL labs-SQL注入(四,sqlmap对于post传参方式的注入)
本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 序言:本文主要讲解基于SQL labs靶场,sqlmap工具进行的post传参方式的SQL注入。 传参方式有两类,一类是直接在url栏内进行url编码后进行的传参&am…...

R包:plot1cell单细胞可视化包
介绍 plot1cell是用于单细胞数据seurat数据对象的可视化包。 安装 ## You might need to install the dependencies below if they are not available in your R library. bioc.packages <- c("biomaRt","GenomeInfoDb","EnsDb.Hsapiens.v86&qu…...

Tent混沌人工蜂群与粒子群混合算法遇到问题,具体问题及解决方案如文。
🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 问题描述 Tent混沌人工蜂…...

Python文献调研(一)环境搭建
一、安装Python版本 1.点击进入Python官网 Download Python | Python.org 2.根据自己的需求选择python的版本,点击【Download】 3.自定义安装路径,记得勾选Add Python xxx to PATH 这步是自动配置环境变量的,如果忘记勾选,建议…...
URL重写
目录 步骤1 规则语法 Nginx URL重写规则语法 Apache URL重写规则语法 步骤2 规则配置 Apache URL重写规则配置 启用mod_rewrite模块 配置.htaccess文件 编写重写规则 测试重写规则 Nginx URL重写规则配置 配置server或location块 测试重写规则 步骤1 规则语法 Ngin…...

git配置环境变量
一.找到git安装目录 打开此git安装目录下的bin文件,复制此文件路径 二.配置环境变量 2.1 右键点击此电脑的属性栏 2.2 点击高级系统配置 2.3 点击环境变量 2.4 按图中步骤进行配置 三.配置完成 win r 输入cmd打开终端 终端页面中输入 git --version 如图所示…...

vue3编程-import.meta.glob实现动态路由(菜单)
import.meta.glob 是vite提供的批量懒加载组件的方法 本地开发环境: const modules import.meta.glob(../views/**/*.vue)这段代码返回的modules是一个Map: key是vue文件的相对路径,值是一个函数,将函数打印出来,如…...

富唯智能转运机器人:高效、智能、未来的选择
在现代工业中,高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人,以其卓越的技术和智能化的设计,为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器,拥有多种移载平台,…...

跨境电商独立站:Shopify/Wordpress/店匠选哪个?
在面对不断增加的平台运营压力时,不少跨境电商的商家逐渐将注意力转向建立自己的独立站。据《中国跨境出口电商发展报告(2022)》所示,中国拥有的独立站数量在2022年已接近20万个,这表明独立站已成为卖家拓展海外市场的…...

减轻幻觉新SOTA,7B模型自迭代训练效果超越GPT-4,上海AI lab发布
LLMs在回答各种复杂问题时,有时会“胡言乱语”,产生所谓的幻觉。解决这一问题的初始步骤就是创建高质量幻觉数据集训练模型以帮助检测、缓解幻觉。 但现有的幻觉标注数据集,因为领域窄、数量少,加上制作成本高、标注人员水平不一…...
53.最大子数组和,动态规划+贪心解法!!!
力扣53最大子数组和 题目动态规划贪心 题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输入:nums…...

python+vue3+onlyoffice在线文档系统实战20240723笔记,项目界面设计和初步开发
经过之前的学习,已经能够正常打开文档了。 目前为止,我们的代码能够实现: 打开文档编辑文档手动保存自动保存虽然功能依然比较少,但是我们已经基本实现了文档管理最核心的功能,而且我们有个非常大的优势,就是支持多人同时在线协同编辑。 现在我们要开发项目,我们得做基…...

谷粒商城实战笔记-72-商品服务-API-属性分组-获取分类属性分组
文章目录 一,后端接口开发Controller层修改接口接口测试 二,前端开发 这一节的内容是开发获取分类属性分组的接口。 一,后端接口开发 Controller层修改接口 修改AttrGroupController接口。 RequestMapping("/list/{catelogId}")p…...
Vue 自定义指令
文章目录 注册局部注册全局注册 钩子钩子参数应用1、按钮权限验证2、自定义用户行为收集指令3、按钮点击防抖4、输入框自动获取焦点5、输入框自动去空字符串6、文字展示不下时展示提示框 注册 局部注册 export default {setup() {/*...*/},directives: {// 在模板中启用 v-fo…...

【python】python图书管理系统_普通用户+管理员菜单(源码+论文)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...
智能路面裂缝检测:基于YOLO和深度学习的全流程实现
引言 路面裂缝检测是维护道路质量和延长道路寿命的重要手段。传统的检测方法往往费时费力且易受人为因素影响。为了提高检测效率和准确性,本文介绍了一种基于深度学习的路面裂缝检测系统。该系统包括用户界面,利用YOLO(You Only Look Once&a…...
C++ unordered_map
1. unordered系列关联式容器 在C98 中, STL 提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 ,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...