dayjs日期格式化,开发uniapp或unicloud前后端进行时间格式转换

在这里插入图片描述

一、 为什么要用日期格式化

因为在开发项目过程中,会遇到各种各样的日期格式,有的显示完整的年-月-日 时:分:秒,而有的场景就只显示月-日等格式,还有就是显示当前时间和注册时间的间隔时长等,场景非常多,如下图举例所示:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
之所以需要进行格式化转换,是因为我们在数据库存储日期的时候都是存储的时间戳(时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数),如下图①所示:
在这里插入图片描述
为什么不存储成②那种,看起来比时间戳那一堆数字更加直观那,原因就是因为时间戳是绝对值不存在时区时差的问题,如果要存储成②那种,需要关注服务器的时区,下面会介绍这里先不过多阐述了,所以后端存储时间基本都是约定俗成的存储时间戳,这样就导致前端拿到时间戳之后需要转换成我们可以阅读的时间格式如:2024年10月13日 18:22:33这样,因此前端处理后端传了过来的数据时候,经常要对时间戳进行转换。

二、 如何将时间戳转为日期格式

1、自己写方法,进行转换

现在有了AI加持,让我们写代码变的很容易,你随便找一款AI让他给我们写一个JS方法,传入时间戳,输出年-月-日 时:分:秒,AI轻松给我们写好一个方法,你只需要放到你的公共方法库便可使用这个方法,如下图所示:
在这里插入图片描述
想要什么功能,就写什么方法就可以了,但是这种方式格式及功能太过单一,也可能会存在一些没有检测出来的bug导致上线后出问题,原来我一直这样做,但是吃过几次亏之后感觉使用更加可靠的第三方库更靠谱一些。

2、使用第三方库

1)momentjs

官网地址:momentjs.com
中文网:momentjs.cn

在这里插入图片描述
上图是npmjs的数据,moment.js库周下载量22,104,960次,相当出名使用人超多,功能非常非常的多,那么问题就来了,包有点大,我们大多数情况下只需要他的基本功能就可以了,很多东西用户到,所以可能会导致我们项目打包过大,大家按需使用。

2)dayjs

官网地址:day.js.org
中文网:dayjs.fenxianglu.cn
Day.js 是一个轻量的处理时间和日期的 JavaScript 库,设计灵感来Moment.js和他的 API 设计保持完全一样,day.js的体积比moment.js更小,只有2KB左右。
在这里插入图片描述
看上面的下载量21,489,819就知道dayjs同样是一款比较受欢迎的js日期库,他的最大优势就是比较小,如果你会使用momentjs的话,那么你就会使用dayjs了,因为他们的使用方式是几乎一样的,之所以dayjs比较小,是因为插件是一个独立的模块,可以添加到Day.js来扩展功能或添加新特性,默认情况下,Day.js只提供核心代码,没有安装插件,可以根据需要加载多个插件。

三、 dayjs的常见用法

1.基础格式化format

dayjs().format("YYYY-MM-DD HH:mm:ss")  //2024-10-13 22:18:30
dayjs(1728509168538).format("YYYY年MM月DD HH时mm分ss秒") //2024年10月10 05时26分08秒
dayjs("2024/11/3").format("YYYY-MM-DD HH:mm:ss") //2024-11-03 00:00:00

更多格式化占位符

2.常用操作

1)加和减

//加7天
dayjs().add(7, 'day').format("YYYY-MM-DD HH:mm:ss"); //2024-10-20 22:57:33//减3月
dayjs("2024-10-13 22:25:33").subtract(3, 'M').format("YYYY-MM-DD HH:mm:ss");//2024-07-13 22:25:33
单位缩写描述
dayd
weekw
monthM
yeary
hourh小时
minutem分钟

更多占位符

2)时间的开始和结束

//今天的开始时间
dayjs().startOf('day').format("YYYY-MM-DD HH:mm:ss"); //2024-10-13 00:00:00//当前时间小时的结束
dayjs("2024-10-13 22:25:33").endOf('hour').format("YYYY-MM-DD HH:mm:ss"); //2024-10-13 22:59:59
单位缩写描述
dayd
monthM
yeary
hourh小时

更多占位符

3.常用查询

文档地址

1)是否相同

比较当前时间和给定时间是否相同,返回true或false

dayjs().isSame(dayjs('2024-10-10')); //false

isSame默认比较的是毫秒,如果只比较天或月份是否相同,需要设置第二个参数,此参数和上面占位符相同,可以是全称也可以是简写,如year、month、day可以改为y、M、d等

dayjs().isSame("2024-10-14",'day');  //true

2)是否之前和是否相同或之前

//是否在另一个提供的日期时间之前
dayjs('2024-10-10').isBefore('2024-10-15') //true//是否和另一个提供的日期时间相同或在其之前,这个需要依赖插件,如下所示
import dayjs from "dayjs";
import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
dayjs.extend(isSameOrBefore);
dayjs('2024-10-10').isSameOrBefore('2024-10-10');  //true

3)是否之后和是否相同或之后

功能和isBefore是一样的,哪个用着习惯用哪个。

//否在另一个提供的日期时间之后
dayjs().isAfter(dayjs('2024-10-20'))
//是否和另一个提供的日期时间相同或在其之后
dayjs().isSameOrAfter(dayjs('2024-10-20'))

4)是否两者之间

dayjs('2024-10-10').isBetween('2024-10-1', dayjs('2024-10-25')); //true

4.其他我常用的

1)日期格式转换为时间戳

dayjs("2025-10-22").valueOf();  //1761062400000

2)日期间隔diff

返回指定单位下两个日期时间之间的差异

dayjs().diff('2020-09-15', 'day');  //1490//还有第三个参数,设置为true的时候将是一个浮点型的数值
dayjs().diff('2020-09-15', 'day');  //1490.645390925926

四、时区影响

在开始就提到过,向服务器存储时间大多数是存储时间戳,这是相对于1970年的绝对值,不会受到时区的影响,如果在服务器直接获取日期格式如:2024-10-20,这种日期会受时区影响,看下面的例子。

同样的一行代码,获取当前的时间,如果是本地运行,获取的时间是2024-10-14 16:01:36,在云端时间是2024-10-14 08:02:25,可以看到差了8个小时,因为本地是北京时间东八区,服务器是格林威治天文台时间零时区,差了8个时区8个小时,如果你在服务端没有注意时区的问题,那可就是大麻烦了。
在这里插入图片描述
如果你想在服务端也使用dayjs而且还需要考虑时区的问题,dayjs给我们提供了插件通过设置默认时区,我们可以按照下面的代码进行实现。

var dayjs = require('dayjs');
var utc = require('dayjs/plugin/utc')
var timezone = require('dayjs/plugin/timezone') // dependent on utc plugin
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.tz.setDefault("Asia/Shanghai")dayjs.tz().format("YYYY-MM-DD HH:mm:ss")  //获取当前时间格式化
dayjs.tz(1728893943018).format("YYYY-MM-DD HH:mm:ss")  //获取指定时间格式化

Asia/Shanghai这个是代表时区,亚洲/上海,你也可以设置其他时区,下面连接时全球的标识符,可以选择自己需要的时区。
全球时区标识符 - 传送门

最后

dayjs还有很多的属性,上面文档已经给了官方的地址,大家可以自己研究一下他的更多用法,我的这篇文章列举了一下常见的用法,希望通过这篇文章的学习,能够在开发中帮助到你,提升你的开发效率。

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

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

相关文章

idea2024年版本

最简单安装2024.2版本idea 内带安装教程 ** 下载链接:https://pan.quark.cn/s/ab24afbaa43f 提取码:KHrq

jmeter发送post请求

在jmeter中,有两种常用的请求方式,get和post.它们两者的区别在于get请求的参数一般是放在路径中,可以使用用户自定义变量和函数助手等方式进行参数化,而post请求的参数不能随url发送,而是作为请求体提交给服务器。而在…

FreeRTOS——中断管理

中断理论剖析 中断简介 中断是一种机制,用于处理高优先级的事件或故障。当一个中断事件发生时,单片机可以立即中断正在执行的程序,转而处理中断事件。这种机制可以提高系统的响应速度和实时性。 中断优先级分组设置 ARM Cortex-M使用了8位宽…

Wed前端入门——HTML、CSS

Wed前端入门——HTML、CSS 一般的页面有HTML、CSS以及JavaScript组成 HTML定义了页面的结构和内容&#xff0c;包括文本、图像、链接等等CSS用于定义页面的布局和样式JS用于添加交互性和动态功能作用 一、HTML 基本格式&#xff1a; <!-- 文档类型为HTML --> <!D…

【C++笔试强训】如何成为算法糕手Day9

学习编程就得循环渐进&#xff0c;扎实基础&#xff0c;勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 添加逗号 思路&#xff1a; 代码实现&#xff1a; 跳台阶 思路&#xff1a; 代码实现&#xff1a; 扑克牌顺子 思路&#xf…

收藏!时间序列特征提取最全总结

时间序列数据在很多领域都是重要的结构化数据形式&#xff0c;例如金融、经济、生态学、神经科学和物理学。在多个时间点观测或测量的数据形成了时间序列。许多时间序列是固定频率的&#xff0c;也就是说数据是根据相同的规则定期出现的&#xff0c;例如每15秒、每5分钟或每月1…

高级IO——五种IO模型

一般我们在写一些简单的小项目的时候&#xff0c;免不了会用到IO接口&#xff0c;比如C语言中的scanf/printf又或者是 C中的cout/cin&#xff0c;或者是在Linux操作系统中的文件IO接口read/write。这些接口默认都是阻塞的&#xff0c; 这又引出了阻塞/非阻塞IO的概念&#xff0…

Lobby——网络游戏大厅设计与参考建议!!!

随着网络游戏越来越多&#xff0c;游戏的主界面也是做的越来越花哨&#xff0c;各种界面层出不穷&#xff01;恨不得&#xff0c;一个主界面直接把所有的业务塞满&#xff01;&#xff01; 看着这十年不换的界面&#xff0c;经久不换&#xff0c;如同嚼蜡&#xff01;你会发现x…

GPU编程(1)GPU架构

总体 显卡结构 风扇在下面&#xff0c;采用热管方式&#xff0c;用气体液体的转化来带走热量。包裹热管的是铜制散热板&#xff0c;外围是铝制格扇&#xff0c;更快排除热量。 视频接口个pcie都是直接连接GPU。 所有的供电模块公用一个PWM芯片。 显存的型号就称之为显存颗粒…

保护企业终端安全,天锐DLP帮助企业智能管控终端资产

为有效预防员工非法调包公司的软硬件终端资产&#xff0c;企业管理员必须建立高效的企业终端安全管控机制&#xff0c;确保能够即时洞察并确认公司所有软硬件资产的状态变化。这要求企业要有一套能够全面管理终端资产的管理系统&#xff0c;确保任何未经授权的资产变动都能被迅…

Git推送被拒

今天开发完成一个新的需求&#xff0c;将自己的分支合并到test分支后&#xff0c;推送到远程仓库&#xff0c;结果显示推送被拒&#xff1a; 原因是因为有人更新了test分支的代码&#xff0c;我在合并之前没有拉取最新的test分支代码&#xff0c;所以他提示我“推送前需要合并…

企业级业务架构和IT架构规划方案(120页PPT下载)

方案内容综述 方案涵盖了从战略分析到具体实施路径的内容。提出了IT架构规划的工作思路&#xff0c;包括项目启动、部门访谈、资料收集、内部数据库搜索与先进实践研究等步骤&#xff0c;旨在通过这些步骤完成现状及差距分析&#xff0c;并基于此设计未来的应用架构、数据架构…

计算机网络——应用层(DNS域名系统、文件传输协议FTP、远程终端协议TELNET、万维网)

应用层概述 不同网络应用的应用进程之间&#xff0c;还需要用不同的通信规则。因此在运输层协议之上&#xff0c;还需要有应用层协议。 每个应用层协议都是为了解决某一类应用问题&#xff0c;而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成。…

信息安全工程师(53)网络安全审计机制与实现技术

前言 网络安全审计机制是指为了保护网络安全并发现潜在风险和漏洞而进行的一系列审计活动。审计的目的是检查并评估网络系统的安全性&#xff0c;以确保其符合相关法律法规和安全标准。 一、网络安全审计机制的重要性 网络安全审计机制对于保护组织的信息资产和敏感数据至关重要…

LabVIEW提高开发效率技巧----高效文件I/O

在LabVIEW开发中&#xff0c;文件I/O操作常常是性能瓶颈之一&#xff0c;特别是处理大数据时&#xff0c;如何高效地存储和读取数据显得尤为重要。本文将详细介绍如何利用TDMS Streaming来实现高效的文件I/O&#xff0c;并结合具体例子说明在实际开发中的应用技巧。 1. 什么是T…

迅为RK3562开发板/核心板240PIN引脚全部引出,产品升级自如

可应用于人脸跟踪、身体跟踪、视频监控、自动语音识别(ASR)、图像分类驾驶员辅助系统(ADAS)、车牌识别、物体识别等。 iTOP-3562开发板/核心板采用瑞芯微RK3562处理器&#xff0c;内部集成了四核A53Mali G52架构&#xff0c;主频2GHZ&#xff0c;内置1TOPSNPU算力&#xff0c;R…

Gin框架操作指南08:日志与安全

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;本教程采用工作区机制&#xff0c;所以一个项目下载了Gin框架&#xff0c;其余项目就无需重复下载&#xff0c;想了解的读者可阅读第一节&#xff1a;Gin操作指南&#…

【回顾一下AQS知识,关于公平锁与非公平锁】

文章目录 一.什么是AQS二.公平锁和非公平锁实现三.公平锁和非公平锁的区别四.小结 一.什么是AQS AQS&#xff0c;全称 AbstractQueuedSynchronizer&#xff0c;是 Java 中用于构建锁和同步器的一个基础框架类&#xff0c;位于 java.util.concurrent.locks 包中。AQS 通过一个先…

Android 15 推出新安全功能以保护敏感数据

Android 15 带来了增强的安全功能&#xff0c;可保护您的敏感健康、财务和个人数据免遭盗窃和欺诈。 它还为大屏幕设备带来了生产力改进&#xff0c;并对相机、消息和密钥等应用进行了更新。 Android 防盗保护 Google 开发并严格测试了一套全面的功能&#xff0c;以在盗窃之…

Java基础(6)

深拷贝和浅拷贝区别了解吗&#xff1f;什么是引用拷贝&#xff1f;关于深拷贝和浅拷贝区别&#xff0c;我这里先给结论&#xff1a;浅拷贝&#xff1a;浅拷贝会在堆上创建一个新的对象&#xff08;区别于引用拷贝的一点&#xff09;&#xff0c;不过&#xff0c;如果原对象内部…