Vue3+vite搭建基础架构(3)--- 使用dayjs

Vue3+vite搭建基础架构(3)--- 使用dayjs

  • 说明
  • 官方文档
  • vite.config.js别名配置
  • 安装dayjs
    • 安装命令
  • 使用dayjs
    • 将dayjs封装为自己的日期工具类
    • 使用dataUtil.js日期工具类示例

说明

这里记录下自己在Vue3+vite的项目使用dayjs的过程,不使用ts语法,方便以后直接使用。这里承接自己的博客Vue3+vite搭建基础架构(2)— 使用Element Plus这篇博客,在该博客项目的基础上增加使用dayjs。

官方文档

dayjs官方文档:https://day.js.org/docs/zh-CN/installation/node-js

vite.config.js别名配置

增加这个配置是为了后面引用工具类的时候,可以直接用@符号代替相对路径来找文件,这里@符号表示src文件夹。
在这里插入图片描述
代码如下:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
//引入path用于写别名配置,自带无须安装
import path from 'path'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],resolve: {//别名配置alias: {'~': path.resolve(__dirname, './'),'@': path.resolve(__dirname, 'src')},//引入文件的时候,可以忽略掉以下文件后缀extensions: ['.js', '.mjs', '.vue', '.json', '.less', '.css']}
})

安装dayjs

根据官网给的命令
在这里插入图片描述

安装命令

npm install dayjs --save

在webstorm里面的Terminal输入npm install dayjs --save命令安装该依赖。执行完如下:
在这里插入图片描述
package.json会增加dayjs版本号
在这里插入图片描述

使用dayjs

在main.js文件里面引入dayjs如下:
在这里插入图片描述
main.js代码:

import { createApp } from 'vue'
//引入element-plus
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
//将element-plus里面默认语言英文改为中文,需要引入它
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
//引入dayjs日期插件
import dayjs from 'dayjs'
import './style.css'
import App from './App.vue'const app = createApp(App)
//使用element-plus,并设置语言为中文
app.use(ElementPlus, {locale: zhCn,
})
//通过provide全局注入工具函数
app.provide('$dayjs', dayjs)
app.mount('#app')

在App.vue测试使用dayjs如下:
在这里插入图片描述

App.vue代码如下:

<script setup>import {ref, inject, onMounted} from 'vue'//日期变量,使用ref进行双向绑定const dateValue = ref('')//获取日期变量值,需要加.value来获取值console.info("dateValue=",dateValue.value)//onMounted页面初始化完成后执行onMounted(()=>{//获取在main.js里面使用provide全局注册的函数const dayjs=inject('$dayjs')//使用dayjs将当前时间转换为指定样式console.log("dayjs=",dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'))})</script><template><el-button type="primary">Primary</el-button><el-button type="success">Success</el-button><!--日期选择器--><el-date-pickerv-model="dateValue"type="date"placeholder="请选择一天"/>
</template><style scoped></style>

浏览器效果:
控制台成功获取到当前时间
在这里插入图片描述

将dayjs封装为自己的日期工具类

在src目录下新建一个utils工具类文件夹,创建一个dateUtil.js文件。
在这里插入图片描述
dateUtil.js工具类代码如下:

//日期工具类
import dayjs from 'dayjs'/*** 校检日期格式是否为YYYY-MM-DD这种格式* @param date* @returns {boolean}*/
export function isValidDate(date) {return dayjs(date,"YYYY-MM-DD",true).isValid()
}/*** 校检日期格式是否为YYYY-MM-DD HH:mm:ss这种格式* @param date* @returns {boolean}*/
export function isValidDateTime(date) {return dayjs(date,"YYYY-MM-DD HH:mm:ss",true).isValid()
}/*** 获取当前日期年月日,时间格式为YYYY-MM-DD* @returns {string}*/
export function getCurrentDate() {return dayjs(new Date()).format("YYYY-MM-DD")
}/*** 获取当前日期年月日时分秒,时间格式为YYYY-MM-DD HH:mm:ss(24小时制,如果hh为小写表示为12小时制)* @returns {string}*/
export function getCurrentDateTime() {return dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss")
}/*** 将传过来的日期转换为YYYY-MM-DD这种格式* @param date:为传过来的日期* @returns {string}*/
export function getConvertDate(date) {return dayjs(date).format("YYYY-MM-DD")
}/*** 将传过来的日期转换为YYYY-MM-DD HH:mm:ss这种格式* @param date:为传过来的日期* @returns {string}*/
export function getConvertDateTime(date) {return dayjs(date).format("YYYY-MM-DD HH:mm:ss")
}/*** 将传过来的日期加X日期且时间格式为YYYY-MM-DD这种格式,如:getXAfterDate('2023-11-11',1,'day'),结果为2023-11-12* @param date:为传过来的日期* @param num:在当前日期加num,类型为int* @param dateType:为要加的日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型* @returns {string}*/
export function getXAfterDate(date,num,dateType) {return dayjs(date).add(num,dateType).format("YYYY-MM-DD")
}/*** 将传过来的日期加X日期且时间格式为YYYY-MM-DD HH:mm:ss这种格式,如:getXAfterDateTime('2023-11-11 10:23:45',1,'day'),结果为2023-11-12 10:23:45* @param date:为传过来的日期* @param num:在当前日期加num,类型为int* @param dateType:为要加的日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型* @returns {string}*/
export function getXAfterDateTime(date,num,dateType) {return dayjs(date).add(num,dateType).format("YYYY-MM-DD HH:mm:ss")
}/*** 将传过来的日期减去X日期且时间格式为YYYY-MM-DD这种格式,如:getXBeforeDate('2023-11-11',1,'day'),结果为2023-11-10* @param date:为传过来的日期* @param num:在当前日期加num,类型为int* @param dateType:为要加的日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型* @returns {string}*/
export function getXBeforeDate(date,num,dateType) {return dayjs(date).subtract(num,dateType).format("YYYY-MM-DD")
}/*** 将传过来的日期减去X日期且时间格式为YYYY-MM-DD HH:mm:ss这种格式,如:getXBeforeDateTime('2023-11-11 10:23:45',1,'day'),结果为2023-11-10 10:23:45* @param date:为传过来的日期* @param num:在当前日期加day,类型为int* @param dateType:为要加的日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型* @returns {string}*/
export function getXBeforeDateTime(date,num,dateType) {return dayjs(date).subtract(num,dateType).format("YYYY-MM-DD HH:mm:ss")
}/*** 计算2个日期之间的差值* @param startDate:开始日期* @param endDate:结束日期,结束日期要比开始日期大* @param dateType:日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型* @returns {number}*/
export function getDateDiff(startDate,endDate,dateType) {return dayjs(endDate).diff(dayjs(startDate),dateType)
}/*** 判断date1是否在date2之前,比如:date1:2023-01-01 13:30:23,date2:2022-12-01 13:30:23,结果为false* @param date1* @param date2* @returns {boolean}*/
export function isBefore(date1,date2) {return dayjs(date1).isBefore(dayjs(date2))
}/*** 判断date1是否在date2之后,比如:date1:2023-01-01 13:30:23,date2:2022-12-01 13:30:23,结果为true* @param date1* @param date2* @returns {boolean}*/
export function isAfter(date1,date2) {return dayjs(date1).isAfter(dayjs(date2))
}/*** 判断date1是否与date2相同,比如:date1:2023-01-01 13:30:23,date2:2022-12-01 13:30:23,结果为false* @param date1* @param date2* @returns {boolean}*/
export function isSame(date1,date2) {return dayjs(date1).isSame(dayjs(date2))
}/*** 判断date1是否等于或者在date2之前,比如:date1:2023-01-01 13:30:23,date2:2022-12-01 13:30:23,结果为false* @param date1* @param date2* @returns {boolean}*/
export function isSameOrBefore(date1,date2) {return dayjs(date1).isSameOrBefore(dayjs(date2))
}/*** 判断date1是否等于或者在date2之后,比如:date1:2023-01-01 13:30:23,date2:2022-12-01 13:30:23,结果为true* @param date1* @param date2* @returns {boolean}*/
export function isSameOrAfter(date1,date2) {return dayjs(date1).isSameOrAfter(dayjs(date2))
}/*** 判断betweenDate日期是否在startDate开始日期和endDate结束日期之间* @param startDate:开始日期* @param betweenDate:中间日期* @param endDate:结束日期要比开始日期大* @returns {boolean}*/
export function isBetween(startDate,betweenDate,endDate) {return dayjs(startDate).isBetween(betweenDate, dayjs(endDate))
}/*** 将传过来的日期转为当年的1月1号或者当月的1号或者当周的周一* @param date:传过来日期* @param dateType,日期类型,为:year,month,week这3种* @returns {string}*/
export function getEarlyDaysDate(date,dateType) {return dayjs(date).startOf(dateType).format("YYYY-MM-DD")
}/*** 将传过来的日期转为当年的12月31号或者当月的最后一天或者当周的周日* @param date:传过来日期* @param dateType,日期类型,为:year,month,week这3种* @returns {string}*/
export function getLastDaysDate(date,dateType) {return dayjs(date).endOf(dateType).format("YYYY-MM-DD")
}/*** 获取2个日期之间的所有日期,包括开始日期和结束日期,如:getIntermediateDate('2023-12-01','2023-12-15',1,'day'))* @param startDate:开始日期* @param endDate:结束日期要大于开始日期* @param num:在开始日期上加num,int类型,如果dateType为day,num为1那么就是在开始日期上加一天* @param dateType,日期类型,类型如下:'minute','hour','day','week','month','year'这六种类型* @returns {*[]}*/
export function getIntermediateDate(startDate,endDate,num,dateType) {//声明一个数组用来存放所有日期,默认把开始日期放进数组里面,不然少一个开始日期数据let daysArray=[startDate]//判断startDate是否在endDate之前while (isBefore(startDate,endDate)){//如果开始日期在结束日期之前,那么就将开始日期加num,并重新赋值给开始日期,不然会死循环startDate = getXAfterDate(startDate,num,dateType)//将计算后的日期放进数组里面daysArray.push(startDate)}return daysArray
}

使用dataUtil.js日期工具类示例

在这里插入图片描述

App.vue代码如下:

<script setup>import {ref, inject, onMounted} from 'vue'import {getCurrentDate,getDateDiff,getXBeforeDate,getIntermediateDate} from '@/utils/dateUtil'//日期变量,使用ref进行双向绑定const dateValue = ref('')//获取日期变量值,需要加.value来获取值console.info("dateValue=",dateValue.value)//onMounted页面初始化完成后执行onMounted(()=>{//获取在main.js里面使用provide全局注册的函数const dayjs=inject('$dayjs')//使用dayjs将当前时间转换为指定样式console.log("dayjs=",dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'))//使用dateUtil工具类获取当前时间console.log("当前日期=",getCurrentDate())//计算2个日期之间相差多少天,只要开始日期和结束日期格式保持一致就行,日期格式为YYYY-MM-DD或者YYYY-MM-DD HH:mm:ss都能计算console.log("相差天数为=",getDateDiff('2024-02-01','2024-03-01','day'))//获取之前日期console.log("获取当前日期的前6天日期=",getXBeforeDate(getCurrentDate(),6,'day'))//获取开始日期与结束日期之间的所有日期console.log("开始日期到结束日期=",getIntermediateDate('2024-02-01','2024-02-15',1,'day'))})</script><template><el-button type="primary">Primary</el-button><el-button type="success">Success</el-button><!--日期选择器--><el-date-pickerv-model="dateValue"type="date"placeholder="请选择一天"/>
</template><style scoped></style>

浏览器结果如下:
在这里插入图片描述
dayjs使用到这里介绍完毕了,2种使用方式,一种通过inject来使用,一种是直接使用写好的工具类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新XC主题 支持六种主题样式 去除域名授权全解密源码 一款多样式主题

Typecho 最新XC主题 去除域名授权全解密源码 这是一款多样式主题&#xff0c;首页支持六种主题样式&#xff0c;支持Pjax优化访问速度&#xff0c;多种单页&#xff0c;如友链、说说等。评论支持表情&#xff0c;自定义编辑器&#xff0c;支持其他样式功能。该主题功能性挺高&…

音视频数字化(音频数字化)

在音视频领域,人们始终追求无限还原现场效果,因此音频越逼真越好,视频越清晰越好。之所以我们需要将音视频信号由模拟转为数字,目的是在录制、存储、编辑、复制、回放等环节的不失真,尽量保持原有细节,不因以上操作,导致音画的质量下降。 为此,视频系统分辨率越来越高,…

【Java程序设计】【C00207】基于(JavaWeb+SSM)的宠物领养管理系统(论文+PPT)

基于&#xff08;JavaWebSSM&#xff09;的宠物领养管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物领养系统 本系统分为前台系统、管理员、收养者和寄养者4个功能模块。 前台系统&#xff1a;游客打开系统…

k8s-HPA

前提条件 安装有**Metrics Server**,HPA的运行监控指标需要由Metrics Server 提供 文档&#xff1a;https://github.com/kubernetes-sigs/metrics-server?tabreadme-ov-file#readme 快速自动缩放&#xff0c;每15秒收集一次指标(可配置)。 资源效率&#xff0c;为集群中的每…

网络防御安全:2-6天笔记

第二章&#xff1a;防火墙 一、什么是防火墙 防火墙的主要职责在于&#xff1a;控制和防护。 防火墙可以根据安全策略来抓取流量之后做出对应的动作。 二、防火墙的发展 区域&#xff1a; Trust 区域&#xff0c;该区域内网络的受信任程度高&#xff0c;通常用来定义内部…

VSCode 设置代理

Open Visual Studio Code, click the settings icon in the lower left corner, and click Settings.

yii2 mongodb 操作

->where([<>,review,""]) 不等于空 $where [newstypeid>[$in>$categoryIdArr]]; 类似mysql in操作 &#xff08;$categoryIdArr是数组&#xff09; ->where([label>[$regex >赞美诗]]) 模糊搜索操作 $where [status>1,name>[$rege…

C++语法 内存区域 和 引用

代码区 存放函数体的二进制代码 由操作系统进行管理 全局区 存放全局变量和静态变量以及常量 存放全局变量 静态变量 常量&#xff08;字符串常量 全局const常量&#xff09; 栈区 由编译器自动分配释放&#xff0c;存放函数的参数值&#xff0c;局部变量等。不要返回局部…

【论文笔记】Multi-Chain Reasoning:对多思维链进行元推理

目录 写在前面1. 摘要2. 相关知识3. MCR方法3.1 生成推理链3.2 基于推理链的推理 4. 实验4.1 实验设置4.2 实验结果 5. 提及文献 写在前面 文章标题&#xff1a;Answering Questions by Meta-Reasoning over Multiple Chains of Thought论文链接&#xff1a;【1】代码链接&…

【数据分享】1929-2023年全球站点的逐日最高气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

Git 怎么设置用户的权限

在团队协作的软件开发中&#xff0c;对于版本控制系统Git来说&#xff0c;确保代码与数据的安全性至关重要。为了实现这一目标&#xff0c;Git提供了灵活且可定制的用户权限管理机制。下面将简单的探讨一下Git如何设置用户的权限&#xff0c;以及如何保护代码和数据。 用户身份…

Nginx 多项目部署,vue刷新404 解决方案

网上找的资料大多都解决不了&#xff0c;废话不多说直接告诉你解决方法。 环境是 TP6 VUE前端官网 VUE 后台管理 部署 两个项目 刷新 404 解决方案 Nginx 配置 直接贴图 如果解决了&#xff0c;给我顶起来&#xff0c;让更多人 快速的解决。

南京观海微电子---如何减少时序报告中的逻辑延迟

1. 引言 在FPGA逻辑电路设计中&#xff0c;FPGA设计能达到的最高性能往往由以下因素决定&#xff1a; ▪ 工作时钟偏移和时钟不确定性&#xff1b; ▪ 逻辑延迟&#xff1a;在一个时钟周期内信号经过的逻辑量&#xff1b; ▪ 网络或路径延迟&#xff1a;Vivado布局布线后引…

element-ui button 组件源码分享

element-ui button 源码分享&#xff0c;基于对源码的理解&#xff0c;编写一个简单的 demo&#xff0c;主要分三个模块来分享&#xff1a; 一、button 组件的方法。 1.1 在方法这块&#xff0c;button 组件内部通过暴露 click 方法实现&#xff0c;具体如下&#xff1a; 二、…

如何使用 Supabase Auth 在您的应用程序中设置身份验证

在本文中&#xff0c;您将学习基本的关键概念&#xff0c;这些概念将帮助您掌握身份验证和授权的工作原理。 您将首先了解什么是身份验证和授权&#xff0c;然后了解如何使用 Supabase auth 在应用程序中实现身份验证。 &#xff08;本文内容参考&#xff1a;java567.com&…

Open CASCADE学习|球面上曲线长度计算

球和球面是数学和物理学中非常重要的概念&#xff0c;它们在许多领域都有广泛的应用。 球面是指所有与固定点等距离的点的集合&#xff0c;这个固定点被称为球心&#xff0c;而这个等距离的长度就是球的半径。球面是一个二维曲面&#xff0c;它是三维空间中点与距离之间关系的…

Docker容器引擎(5)

目录 一.docker-compose docker-compose的三大概念&#xff1a; yaml文件格式&#xff1a; json文件格式&#xff1a; docker-compose 配置模板文件常用的字段&#xff1a; 二.Docker Compose 环境安装&#xff1a; 查看版本&#xff1a; 准备好nginx 的dockerfile的文…

AS-V1000产品介绍:支持GA/T1400视图库标准(可通过GA/T1400接入海康、华为、大华等图传前端设备,实现图传功能)

目 录 一、概述 二、AS-V1000视频监控管理平台的特点 二、视频监控平台通过GA/T1400接入前端设备 &#xff08;一&#xff09;接入华为GA/T1400前端设备 &#xff08;二&#xff09;接入大华GA/T1400前端设备 &#xff08;三&#xff09;接入海康威视GA/…

杂题——试题-算法训练-P0602

分析&#xff1a; 把要重排序的数字转成数组对数组进行排序&#xff0c;从小到大排序数组转成字符串&#xff0c;字符串转成数字&#xff0c;得到最小数再把最小数的字符串反转&#xff0c;得到最大数注意&#xff1a; 在java语言中&#xff0c;如果使用Arrays.toString(digits…

EasyExcel根据对应的实体类模板完成多个sheet的写入与读取

1.展示模板一的实体类 import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowH…