4.前端常用时间工具函数封装

1 判断闰年函数

闰年需要满足以下两个条件,1、能被4整除,但不能被100整除;2、能被400整除

/*** 判断润年* @param {string} year 年份* @return {Boolean}*/
const isLeap = function(year) {if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {return true;}return false;
};

2 获取日期的星期

使用Date自带的getDay方法可以获得指定日期的星期,返回的数值为0到6,分别代表星期天到星期六

/*** 获取星期* @param {string} date 日期* @return {string} 星期*/
const getWeek = function(date) {let Stamp = new Date(date);let weeks = ["日", "一", "二", "三", "四", "五", "六"];return weeks[Stamp.getDay()];
};

3 获取月份天数

只需要区分大小月,然后再特殊处理一下二月份闰年的情况即可

/*** 获取月份天数* @param {string} year  年份* @param {string} month 月份* @return {number} 月份天数*/
const getMonthDays = function(year, month) {month = parseInt(month) - 1;if (month < 0 || month > 11) return "";let months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];if (isLeap(year)) {months[1] = 29;}return months[month];
};

4 数字补零

在遇到一位数的月份和天数时,我们往往需要对其补零,保持两位数

/*** 数字补零* @param {string} str* @return {string}*/
const zero = function(str) {str = parseInt(str);return str > 9 ? str : "0" + str;
};

5 格式化获取今天日期

入参为格式字符串,主要有"yyyy-mm-dd"、"mm-dd-yyyy"、"yyyy-mm-dd hh:MM:ss"、"hh:MM:ss"、"yyyy"、"mm"、"dd"、"hh"等等…………,其中y代表年份,m代表月份,d代表天数,h为小时,M是分钟,S为秒数

/*** 获取今天日期* @param {string} str  日期格式* @return {string} 格式化日期*/
const getToday = function(str = "yyyy-mm-dd") {const date = new Date();const year = date.getFullYear(),month = zero(date.getMonth() + 1),day = zero(date.getDate()),hour = zero(date.getHours()),minute = zero(date.getMinutes()),second = zero(date.getSeconds());let res = "";switch (str) {case "yyyy-mm-dd":res = year + "-" + month + "-" + day;break;case "mm-dd-yyyy":res = month + "-" + day + "-" + year;break;case "yyyy-mm-dd hh:MM:ss":res =year +"-" +month +"-" +day +" " +hour +":" +minute +":" +second;break;case "hh:MM:ss":res = hour + ":" + minute + ":" + second;break;case "yyyy":res = year;break;case "mm":res = month;break;case "dd":res = day;break;case "hh":res = hour;break;case "MM":res = minute;break;case "ss":res = second;break;case "mm-dd":res = month + "-" + day;break;default:res = "参数错误";break;}return res;
};

6 将时间按照所传入的时间格式进行转换

/*** 将时间按照所传入的时间格式进行转换* @param {string} value  日期* @param {string} formatStr  日期格式* @return {string} 格式化日期*/
const dateFormat = function(value, formatStr = "yyyy-mm-dd") {const date = new Date(value);const year = date.getFullYear(),month = zero(date.getMonth() + 1),day = zero(date.getDate()),hour = zero(date.getHours()),minute = zero(date.getMinutes()),second = zero(date.getSeconds());let res = "";switch (formatStr) {case "yyyy-mm-dd":res = year + "-" + month + "-" + day;break;case "mm-dd-yyyy":res = month + "-" + day + "-" + year;break;case "yyyy-mm-dd hh:MM:ss":res =year +"-" +month +"-" +day +" " +hour +":" +minute +":" +second;break;case "hh:MM:ss":res = hour + ":" + minute + ":" + second;break;case "yyyy":res = year;break;case "mm":res = month;break;case "dd":res = day;break;case "hh":res = hour;break;case "MM":res = minute;break;case "ss":res = second;break;case "mm-dd":res = month + "-" + day;break;default:res = "参数错误";break;}return res;
};

7 获取指定日期的上一天日期

可以获取指定日期的上一天日期,如2021-01-01的上一天为2020-12-31

/*** 获取上一天日期* @param {string} str  当前日期* @return {string} 上一天日期*/
const getYesterday = function(str) {let date = str.split("-");let year = parseInt(date[0]),month = parseInt(date[1]),day = parseInt(date[2]);if (month > 12 || month < 1 || day > getMonthDays(year, month))return "日期不合法";day -= 1;if (day > 0) {return year + "-" + zero(month) + "-" + zero(day);}month -= 1;if (month > 0) {return year + "-" + zero(month) + "-" + getMonthDays(year, month);}year -= 1;return year + "-" + 12 + "-" + getMonthDays(year, 12);
};

8 获取指定日期的下一天日期

可以获取指定日期的上一天日期,如2020-12-31的下一天为2021-01-01

/*** 获取下一天日期* @param {string} str  当前日期* @return {string} 下一天日期*/
const getTomorrow = function(str) {let date = str.split("-");let year = parseInt(date[0]),month = parseInt(date[1]),day = parseInt(date[2]);if (month > 12 || month < 1 || day > getMonthDays(year, month))return "日期不合法";day += 1;if (day <= getMonthDays(year, month)) {return year + "-" + zero(month) + "-" + zero(day);}month += 1;if (month < 13) {return year + "-" + zero(month) + "-" + "01";}year += 1;return year + "-" + "01" + "-" + "01";
};

9 获取指定日期的前n天日期

为获取上一天日期的扩展,这里简单的循环获取上一天来获取前n天日期

/*** 获取前n天日期* @param {string} n  当前日期* @return {string} 前n天日期*/
const beforeDay = function(date, n) {if (date.split("-").length < 3) return "日期格式错误";let res = dateFormat(date);n = parseInt(n);while (n--) {res = getYesterday(res);}return res;
};

10 获取指定日期的后n天日期

为获取下一天日期的扩展,这里简单的循环获取下吧一天来获取后n天日期

/*** 获取后n天日期* @param {string} n  当前日期* @return {string} 后n天日期*/
const afterDay = function(date, n) {if (date.split("-").length < 3) return "日期格式错误";let res = dateFormat(date);while (n--) {res = getTomorrow(res);}return res;
};

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

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

相关文章

【leetcode 力扣刷题】双指针//哈希表 解决链表有环等问题

双指针//哈希表 解决链表有环等问题 19. 删除链表的倒数第N个结点遍历两次&#xff0c;先求得链表长度&#xff0c;再删除双指针&#xff0c;只遍历一次 141. 环形链表 【判断链表是否有环】哈希表快慢双指针 142. 环形链表Ⅱ 【找环的入口】哈希表双指针求环中有多少个结点 面…

【jvm】类的主动使用和被动使用

目录 一、主动使用二、被动使用 一、主动使用 1.创建类的实例 2.访问某个类或接口的静态变量&#xff0c;或者对该静态变量赋值 3.调用类的静态方法 4.反射&#xff08;例如Class.forName(“com.learning.Test”)&#xff09; 5.初始化一个类的子类 6.java虚拟机启动时被标明为…

【广州华锐视点】AR配电所巡检系统:可视化巡检利器

随着科技的发展&#xff0c;人工智能、大数据等技术逐渐应用于各个领域&#xff0c;为人们的生活带来便利。在电力行业&#xff0c;AR(增强现实)技术的应用也日益广泛。AR配电所巡检系统作为一种新型的巡检方式&#xff0c;可以实现多种功能&#xff0c;提高巡检效率&#xff0…

3种JavaScript 对象转数组的方法

方式一&#xff1a;Object.values Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组&#xff0c;值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。 let arr Object.values(obj); //对象转化为数组 ps&#xff1a;如果…

webrtc学习(六)重要信令级时序图

一.四个重要信令 1.用户登录信令 SignIn 2..用户登出信令 SignOut 3..用户等待信令 wait信令是指从服务器的消息队列中获取暂存的中转消息&#xff0c;比如说sdp消息&#xff0c;对于信令服务器来说&#xff0c;他没有办法给用户推送消息&#xff0c;只能是用户推送消息给…

Halcon错误 #2021: System clock has been set back.

修复"Halcon#2021 System clock has been set back."一键即可解决。

JVM——类加载与字节码技术—字节码指令

2.字节码指令 2.1 入门 jvm的解释器可以识别平台无关的字节码指令&#xff0c;解释为机器码执行。 2a b7 00 01 b1 this . init&#xff08;&#xff09; return 准备了System.out对象&#xff0c;准备了参数“hello world”,准备了对象的方法println(String)V&#xff…

net start Mysql 启动服务时 ,显示“Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误

一、问题 有时候&#xff0c;输入net start Mysql 启动服务时 mysql>net start Mysql 显示 Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误 二、原因 由于mysql的默认端口是3306&#xff0c;因此在启动服务的时候&#xff0c;如果此端口被占用&#xff0c;就会出…

GPS坐标转换并实时显示轨迹

文章目录 下载数据集创建功能包主要代码使用 下载数据集 链接: https://pan.baidu.com/s/1zSXyNhMNQdaFlDFziDse1Q 密码: 6j6u 其中话题/gps/fix和/imu_correct分别为sensor_msgs/NavSatFix类型的gps数据和sensor_msgs/Imu类型的imu数据 查看相关话题信息 创建功能包 cat…

【git】当git lab或者其他代码管理网站的搜索功能不好用时,可以尝试使用git命令辅助搜索关键字

查询git log具体某条记录的方法 1、将 <关键词> 替换为你想要查询的关键词。这将列出所有提交记录中包含指定关键词的记录&#xff1a; git log --grep<关键词> // 注意<>在实际使用时不必写 2、如果你知道要查询的提交记录的哈希值&#xff08;commit has…

创建型模式-抽象工厂模式

在抽象工厂模式中&#xff0c;接口是负责创建一个相关对象的工厂&#xff0c;不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定具体实现类。通过使用抽象工厂模式&#xff…

Pytest和Unittest测试框架的区别?

如何区分这两者&#xff0c;很简单unittest作为官方的测试框架&#xff0c;在测试方面更加基础&#xff0c;并且可以再次基础上进行二次开发&#xff0c;同时在用法上格式会更加复杂&#xff1b;而pytest框架作为第三方框架&#xff0c;方便的地方就在于使用更加灵活&#xff0…

C#使用自定义的比较器对版本号(编码)字符串进行排序

给定一些数据&#xff0c;如下所示: “1.10.1.1.1.2”, “1.1”, “2.2”, “1.1.1.1”, “1.1.3.1”, “1.1.1”, “2.10.1.1.1”, “1.1.2.1”, “1.2.1.1”, “2.5.1.1”, “1.10.1.1”, “1.10.2.1”, “1.11.3.1”, “1.11.12.1”, “1.11.11.1”, “1.11.3.1”, “1”, “…

Matlab进阶绘图第26期—双向堆叠图

双向堆叠图是一种特殊的堆叠图&#xff0c;其通过在两个方向构建堆叠图&#xff0c;从而可以对两种类别的同名及综合属性进行全方位的比较。 由于Matlab中未收录双向堆叠图的绘制函数&#xff0c;因此需要大家自行设法解决。 本文分享一个简单的双向堆叠图的绘制方法&#xf…

SMC状态机 创建SMC.sm文件

XX.sm 文件是一个没有定义状态或转换的框架。包含以下特性: 使用%{ %}进行注释。 关键字讲解&#xff1a; 关键字 作用%package指定此FSM所属的类包&#xff0c;与关联的Task类包相同。%fsmclass指定生成…

java中把一个list转tree的方法

环境 我们有个需求&#xff0c;数据库要存一个无限级联的tree&#xff0c;比如菜单&#xff0c;目录&#xff0c;或者地区等数据&#xff0c;现有两个问题&#xff1a; 问如何设计表。怎么返回给前端一个无线级联的json数据。 思考 第一个问题 在设计表的时候&#xff0c;…

矩阵与图的关系:矩阵是图,图是矩阵

原文连接 线性代数最被低估的一个事实&#xff1a;矩阵是图&#xff0c;图是矩阵。 将矩阵编码为图是一种取巧的行为(cheat code)&#xff0c;它其使复杂的行为变得易于研究。 让我告诉你怎么做&#xff01; 1. 非负矩阵的有向图 &#xff08;The directed graph of a nonne…

验证码识别DLL ,滑块识别SDK,OCR图片转文字,机器视觉找物品

验证码识别DLL ,滑块识别SDK 你们用过哪些OCR提取文字&#xff0c;识图DLL&#xff0c;比如Opencv,Labview机器视觉找物品之类&#xff1f;

高等数学之洛必达法则

第二种 由小到大 其他形式 解题步骤 分子分母的式子是乘积的时候可以用等价无穷小替换&#xff0c;如果是-则不允许

数据分析实战│时间序列预测

时间序列预测问题是一类常见的数据分析问题。数据中往往包含时间标签,这类问题往往根据过去一段时间的数据,建立能够比较精确地反映序列中所包含的动态依存关系的数学模型,并对未来的数据进行预测。 01、问题描述及数据挖掘目标 本案例给出二战时期的某气象站温度记录值,通…