工具【1、计算时间差2、获取当天时间前后七天时间3、根据当前数据的位置,在数组中插入数据4、数组中,某个属性相同的数据放在一块,如把某个日期相同的相连一起】

生成UUID

/*** 唯一的随机字符串,用来区分每条数据* @returns {string}*/
export function getUid() {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {const r = (Math.random() * 16) | 0;const v = c === 'x' ? r : (r & 0x3) | 0x8;return v.toString(16);});
}

计算时间差

/*** 计算时间差* @param {String} beginTime :2022-01-13* @param {String} endTime :2022-01-13* @returns {{hours: number, seconds: number, minutes: number, day: number}}*/
export function dealTime(beginTime, endTime) {let dateBegin = beginTime ? new Date(beginTime) : new Date();let dateEnd = endTime ? new Date(endTime) : new Date();let dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数let day = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数let leave1 = dateDiff % (24 * 3600 * 1000); //计算天数后剩余的毫秒数let hours = Math.floor(leave1 / (3600 * 1000)); //计算出小时数//计算相差分钟数let leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数let minutes = Math.floor(leave2 / (60 * 1000)); //计算相差分钟数//计算相差秒数let leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数let seconds = Math.round(leave3 / 1000);return {day,hours,minutes,seconds}
}

获取当天时间

/*** 获取当天时间* @returns {string}*/
export function getCurDay() {let datetime = new Date();let year = datetime.getFullYear();let month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;let date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();return `${year}-${month}-${date}`
}

日期格式处理

/*** 日期格式处理* @param date* @returns {{month: string, year: string, day: string}}*/
export function formatDate(date) {let year = date.getFullYear();let months = date.getMonth() + 1;let month = (months < 10 ? '0' + months : months).toString();let day = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()).toString();return {year: year.toString(),month,day}
}

获取当前天时间

/*** 获取当前天时间* @param {String} target* @param {String} param 【Y:年;M:月;D:日;h:小时;m:分钟;s:秒;】 默认精确到秒* @returns {string}*/
export function getCurrentDate(target, param = 's') {let now = target ? new Date(target) : new Date();let year = now.getFullYear(); //得到年份let month = now.getMonth();//得到月份let date = now.getDate();//得到日期let day = now.getDay();//得到周几let hour = now.getHours();//得到小时let minu = now.getMinutes();//得到分钟let sec = now.getSeconds();//得到秒month = month + 1;if (month < 10) month = "0" + month;if (date < 10) date = "0" + date;if (hour < 10) hour = "0" + hour;if (minu < 10) minu = "0" + minu;if (sec < 10) sec = "0" + sec;const arr = {'Y': year,'M': year + "-" + month,'D': year + "-" + month + "-" + date,'h': year + "-" + month + "-" + date + " " + hour,'m': year + "-" + month + "-" + date + " " + hour + ":" + minu,'s': year + "-" + month + "-" + date + " " + hour + ":" + minu + ":" + sec}return arr[param];
}

获取当天时间前后七天时间

/*** 获取当天时间前后七天时间* @param {number} day day>0 当天时间的后几天 day<0 当天时间前几天* @returns {string}*/
export function getRecentDate(day) {let date1 = new Date(),time1 = date1.getFullYear() + "-" + (date1.getMonth() + 1) + "-" + date1.getDate();//time1表示当前时间let date2 = new Date(date1);date2.setDate(date1.getDate() + day);const y = date2.getFullYear();const m = (date2.getMonth() + 1) > 9 ? (date2.getMonth() + 1) : '0' + (date2.getMonth() + 1)const d = date2.getDate() > 9 ? date2.getDate() : '0' + date2.getDate()return y + "-" + m + "-" + d;
}

数组中,某个属性相同的数据放在一块,如把某个日期相同的相连一起

/*** 数组中,某个属性相同的数据放在一块,如把某个日期相同的相连一起* @param {Object[]} list 传入的数组* @param {String} prop 那个属性相同的数据* @returns {*[]}*/
export function margePropData(list = [], prop) {let arr = [], tempArr = {};list.forEach(item => {if (!tempArr[item[prop]]) {tempArr[item[prop]] = [item]} else {tempArr[item[prop]].push(item)}})for (const tempArrKey in tempArr) {arr = [...arr, ...tempArr[tempArrKey]]}return arr
}

合并行

/*** 合并行* @param {Object[]} list* @param {String} prop*/
export function mergeRows(list = [], prop) {list.forEach(ele => {ele.rowspan = 1})const len = list.lengthfor (let i = 0; i < len; i++) {for (let j = i + 1; j < len; j++) {if (list[i][prop] === list[j][prop]) {list[i].rowspan++list[j].rowspan--}}// 这里跳过已经重复的数据i = i + list[i].rowspan - 1}return list
}

根据当前数据的位置,在数组中插入数据

/*** 根据当前数据的位置,在数组中插入数据* 如数组【1,2,4,5】想要在2后面插入3,*1:首先获取到2的下标,*2:然后获取要插入之前的数据,获取要插入之后的数据,中间就是插入的位置*3:最后把这三个按顺序合并就得到在想要的位置插入数据* @param {number[]|Object[]} list* @param {number} index* @param {Object} target*/
export function insertArrPositionOfIndex(list = [], index = 0, target = {}) {//根据index 找出小于index的数据放在左边const leftList = list.filter((t, i) => i < index);//根据index 找出大于index的数据放在右边const rightList = list.filter((t, i) => i >= index);// 最终合并数据return [...leftList, target, ...rightList]
}

获取元素下标

/*** 获取元素下标* @param {number} dir 为 1:得到正序遍历方法;为 -1: 得到逆序遍历方法。* @returns {(function(*, *, *=): (number|number|number))|*}*/
export function findArrIndex(dir = 1) {return function (array, cb, context) {let length = array.length;// 控制初始 index,0 或者 length-1let index = dir >= 0 ? 0 : length - 1;// 条件: 在数组范围内;// 递增或递减:递加 1 或者 -1; 妙啊~for (; index >= 0 && index <= length - 1; index += dir) {if (cb.call(context, array[index], index)) return index}return -1}
}

map转换成数组

/*** map转换成数组* @param {Object} target* @returns {*[]}* @constructor*/
export function MapConvertArr(target = {}) {let list = [];for (let key in target) {list.push(target[key]);}return list;
}

对象数组去重

/*** 对象数组去重* @param {Object[]} arr 数组* @param {String} prop 根据什么字段去重* @returns {any[]}*/
export function arrayDeduplication(arr, prop) {let map = new Map();return arr.filter(item => !map.has(item[prop]) && map.set(item[prop], 1));
}

防抖

/*** 防抖* @param {function} fn* @param {number} duration* @returns {(function(...[*]): void)|*}* @constructor*/
export function MyDebounce(fn, duration = 100) {let timer = nullreturn (...args) => {clearTimeout(timer)timer = setTimeout(() => {fn(...args);}, duration)}
}

节流

/*** 节流* @param fn* @param {number} duration* @returns {(function(...[*]): (boolean|undefined))|*}* @constructor*/
export function MyThrottle(fn, duration = 100) {let target = true;return (...arg) => {if (!target) {return false;}target = false;setTimeout(() => {fn(...arg);target = true}, duration)}
}

单例模式

/*** 单例模式* @param {Object} className* @returns {*}*/
export function singleton(className) {let ins;return new Proxy(className, {construct(target, args) {if (!ins) {ins = new target(...args)}return ins;}})
}

校验规则 表单提交校验

/*** 校验规则* @param {Object[]} list* @param {Object[]} require* @returns {null}*/
export function verifyRules(list = [], require = []) {let message = nullfor (const key of require) {const isEmpty = list.every(it => !it[key.prop])if (isEmpty) {message = key.messagebreak;}}return message
}

输入框校验

  • 校验输入最大数字长度
  • 校验保留几位小数
  • 校验手机号
  • 校验邮箱
  • 校验身份证
/**** @param target {*} 传入的值* @param rule {String} 需要检验的类型 num_2:输入数字范围,1表示可输入最大值9,2:表示可输入最大值为99,以此类推,;decimal_2:保留小数位,1表示留一位,2表示留两位小数 ;phone校验手机 ;email:校验邮箱 ;IDCard:校验身份证* @param reg {RegExp} 正则* @returns {*|boolean}*/
export function regInput(target, rule = 'num_5', reg) {//校验输入最大数字长度if (rule.includes('num_')) {const endNum = rule.split("_")[1];target = target.replace(/[^\d.]/g, "").replace(".", "");if (endNum < 1) {throw new Error(`规则:${rule}最小为1`)}reg = reg || new RegExp(`^[1-9]\\d{0,${(+endNum - 1)}}$`);if (reg.test(target)) {return target;}return target.slice(0, endNum);}//校验保留几位小数else if (rule.includes('decimal_')) {//清除非数字和小数点的字符target = target.replace(/[^\d.]/g, "");//只保留第一个小数点,清除多余的小数点target = target.replace(/\.{2,}/g, "").replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");const endDecimal = rule.split("_")[1];//只保留几位小数let regStr = ''for (let i = 0; i < endDecimal; i++) {regStr += '\\d';}reg = reg || new RegExp(`^(\\-)*(\\d+)\\.(${regStr}).*$`)if (endDecimal > 0) {return target.replace(reg, '$1$2.$3')} else {return target.replace(/^(\-)*(\d+).*$/, '$1$2');}}//校验手机号else if (rule.includes('phone')) {reg = reg || /^1[3456789]\d{9}$/;return reg.test(target);}//校验邮箱else if (rule.includes('email')) {reg = reg || /^\w+[@]\w{2,5}([.]\w{2,3}){1,3}$/i;return reg.test(target);}//校验身份证else if (rule.includes('IDCard')) {reg = reg || /^[1-9]\d{5}(19\d{2}|20\d{2})(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}(\d|x|X)$/;if (reg.test(target)) {// 校验码校验let idCard_array = target.split("");let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];let checkCode = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];let checkSum = 0;for (let i = 0; i < factor.length; i++) {checkSum += factor[i] * parseInt(idCard_array[i]);}let mod = checkSum % 11;return checkCode[mod] === idCard_array[17].toLowerCase();}return false;}return target;}

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

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

相关文章

【图文详解】SiamFC++与图注意力的强强联合:单目标追踪系统

1.研究背景与意义 随着计算机视觉技术的不断发展&#xff0c;单目标追踪&#xff08;Single Object Tracking, SOT&#xff09;作为计算机视觉领域的一个重要研究方向&#xff0c;已经在许多实际应用中得到了广泛的应用。单目标追踪系统可以通过分析视频序列中的目标运动&…

服务器流量包扣减规则

服务器买的流量包,一般指的是上行带宽,下行通常是不限的 上行和下行是针对服务器而言的 客户端上传文件给服务器,对服务器而言它是在下载,所以对服务器而言他是用的下行带宽(下行流量) 客户端从服务器下载文件,对服务器而言它是在上传,所以对服务器而言他是用的上行带宽(上行…

大数据量条件SQL查询内存处理方案以及数据过滤算法优化

MySQL是一个广泛使用的关系型数据库管理系统。通过SQL语言进行数据操作和查询&#xff0c;还支持多用户、多线程和分布式操作等功能。 在实际使用中&#xff0c;我们会遇到各种查询条件&#xff0c;如字段名、表名、逻辑运算符、比较运算符、函数等。其中&#xff0c;有些查询…

浅析智慧社区建设趋势及AI大数据监管平台方案设计

一、背景与需求 伴随着社会与经济的发展&#xff0c;人们对生活质量的要求越来越高&#xff0c;与此同时&#xff0c;新兴技术的进步也促进了智慧社区市场的逐步成熟。智慧社区是社区管理的一种新理念&#xff0c;是新形势下城市与社会管理的一种创新模式。 在上海、杭州、深…

在.bashrc文件修改环境变量的做法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> ~/.bashrc文件是linux下保存环境变量的系统文件。原以为使用sed命令修改.bashrc文件&#xff0c;实际上不行&#xff0c;需要使用echo命令。具体示例如下…

02-详细介绍Java8新特性方法引用,构造引用,数组引用

方法/构造/数组引用 方法引用 当要传递给Lambda体的操作已经有实现的方法时就可以使用方法引用,方法引用和构造器引用就是为了简化Lambda表达式 方法引用可以看做是Lambda表达式深层次的表达,方法引用本质还是Lambda表达式所以也是函数式接口的一个实例通过方法的名字来指向…

小红书关键词搜索商品列表API接口(分类ID搜索商品数据接口,商品详情接口)演示案例

通过关键词搜索商品API接口&#xff0c;电商平台可以为消费者提供一个简单、快捷的商品搜索功能。用户只需输入关键词&#xff0c;就可以得到与该关键词相关的商品列表。关键词搜索商品API接口还可以提供给第三方开发者一个便捷的商品搜索服务。开发者可以利用该接口&#xff0…

Mac安装配置typescript及在VSCode上运行ts

一、Mac上安装typescript sudo npm install -g typescript 测试一下&#xff1a;出现Version则证明安装成功 tsc -v 二、在VSCode上运行 新建一个xxx.ts文件&#xff0c;测试能否运行 console.log("helloworld") 运行报错&#xff1a;ts-node: command not…

后渗透持久性-– 服务控制管理器

执行以下命令将快速检索服务控制管理器实用程序的 SDDL 权限。 sc sdshow scmanager服务控制管理器 – 安全描述符 PowerShell 还可用于枚举所有用户组的 SDDL 权限并将其转换为可读格式。 $SD Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Schedule\S…

shell 条件语句 if case

目录 测试 test测试文件的表达式 是否成立 格式 选项 比较整数数值 格式 选项 字符串比较 常用的测试操作符 格式 逻辑测试 格式 且 &#xff08;全真才为真&#xff09; 或 &#xff08;一真即为真&#xff09; 常见条件 双中括号 [[ expression ]] 用法 &…

美国服务器在大陆连不上怎么回事?

​  在租用任何美国服务器之前&#xff0c;都需要先搞清楚一些使用问题&#xff0c;毕竟服务器能够不间断地访问也是站在们所期望的。但有时&#xff0c;美国服务器网站或许也会突然出现在大陆打不开的情况&#xff0c;在面临这种情况时&#xff0c;我们应该怎么做? 查看连不…

【史上最细教程】服务器MySQL数据库完成主从复制

文章目录 MySQL完成主从复制教程准备&#xff1a;原理&#xff1a;步骤&#xff1a; 推荐文章 MySQL完成主从复制教程 主从复制&#xff08;也称 AB 复制&#xff09;就是将一个服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从…

Java飞翔的鸟

创建三个包&#xff0c;存放代码。把图片放进文件中 APP包&#xff08;运行&#xff09; GameApp类 package APP; import mian.GameFrame;public class GameApp {public static void main(String[] args) {new GameFrame();} } mian包&#xff08;主内容&#xff09; Barri…

python获取json所有节点和子节点

使用python获取json的所有父结点和子节点 并使用父节点加下划线命名子节点 先展示一段json代码 {"level1": {"level2": {"level3": [{"level4": "4value"},{"level4_2": "4_2value"}]},"level2_…

电力行业的智能调度:数字孪生技术

随着科技的发展&#xff0c;数字孪生技术正逐渐渗透到各个行业领域&#xff0c;其中包括电力行业。数字孪生技术为电力行业带来了前所未有的机遇&#xff0c;使得电力系统的运行更加高效、安全和可持续。本文借用山海鲸可视化软件几个电力行业数字孪生案例探讨数字孪生技术在电…

介绍几种Go语言开发的IDE

文章目录 1.前言2.几种ide2.1 Goland2.2 VsCode示例 2.3 LiteIDE2.4 Eclipse插件GoClipse2.5 Atom2.6 Vim2.7 Sublime Text 3.总结写在最后 1.前言 Go语言作为一种新兴的编程语言&#xff0c;近年来受到了越来越多的关注。 它以其简洁、高效和并发性能而闻名&#xff0c;被广…

Jmeter 压测保姆级入门教程

1、Jmeter本地安装 1.1、下载安装 软件下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/ 选择一个压缩包下载即可 然后解压缩后进入bin目录直接执行命令jmeter即可启动 1.2 修改语言 默认是英文的&#xff0c;修改中文&#xff0c;点击…

关于解决C# WinForm中Chart控件增删数据时报错的解决方法

1.报错代码 System.InvalidOperationExceptionHResult=0x80131509Message=集合已修改;可能无法执行枚举操作。具体报错表现为,在Application.Run(Form1())中断。 2.解决方法 这个错误通常是由于在枚举集合时对集合进行了修改而引起的。在修改完chart控件中的内容后,可能会…

Linux---常用命令汇总

文章目录 关于目录操作的命令ls/llcdpwdmkdir 关于文件操作的命令touchechocatrmmvcpvim 关于查询操作的命令greppsnetstat 关于目录操作的命令 ls/ll ls : 列出当前目录下的目录和文件&#xff08;以行的展示形式&#xff09; ll &#xff1a; 列出当前目录下的目录和文件&…

Django之Cookie与Session,CBV加装饰器

前言 会话跟踪技术 在一个会话的多个请求中共享数据&#xff0c;这就是会话跟踪技术。例如在一个会话中的请求如下&#xff1a;  请求银行主页&#xff1b; 请求登录&#xff08;请求参数是用户名和密码&#xff09;&#xff1b;请求转账&#xff08;请求参数与转账相关的数…