当前位置: 首页 > Web前端 > vue.js

js判断多个日期时间段是否相互交叉

时间:2023-03-31 14:30:06 vue.js

js判断多个日期时间段是否相互交叉最近有个需求。使用Element的dateRange选择多个时间段时,要求不重叠。两个日期不能有交集,临界点不好。在网上找了一些资料,但不是很满意,就自己实现了。主要思路是为每个选中的日期范围生成一个日期数组,然后使用lodash来比较这些数组是否有交集元素。使用的包/库有:dayjs、lodashintersection。为什么不用momentjs,因为太大了,dayjs小,几乎可以实现moment功能。至于相交,是用来判断多个数组相交的,继续往下看!~~//下面的例子,很明显2020-09-11是交集constdate1=['2020-09-01','2020-09-11'];constdate2=['2020-09-11','2020-09-30'];让我们用代码来实现它。通过el-date-picker收集用户选择的日期,是一个range导入对应的包importdayjsfrom'dayjs'import{intersection}from'lodash'methodsmethod://这个主要是利用dayjs做一些事情,//从日期范围生成一串数组,//例如:['2020-09-01','2020-09-03']//=>['2020-09-01','2020-09-02','2020-09-03']selectSpecialDateRange(index){consttimeRange=this.Datelist[index].timethis.Datelist[index].dateArr=[]leti=0while(true){constendTime=dayjs(timeRange[0]).add(i,"days").format("YYYY-MM-DD")this.Datelist[index].dateArr.push(endTime)//和最后一个日期一样,跳出循环if(endTime==timeRange[1]){break;}i++}//下面会比较每两个constuserArr1=this.Datelist.map(v=>v.dateArr)letflag=falsefor(leti=0;i