js 判断同一天的多个时间段是否存在交叉的部分

js 判断同一天的多个时间段是否存在重叠的部分

**基本的思路:日期也可以当成字符串进行比较,把开始日期,结束日期分别存进两个数组,并用sort排序,循环遍历数组,从开始时间的第二个元素去比较结束时间的第一个元素,如果小于,就代表时间段有交叉,直接跳出,不然就继续遍历,遍历结束,说明时间没有重复,可以提交。**

1. 获取开始时间和结束时间,将时间转化成秒数 ;

2. 比较开始时间秒数和结束时间秒数,验证结束时间大于开始时间;

3. 获取当前添加的数据是星期几的,取表格中所有当前星期的开始时间和结束时间存到数组中(以下说的数组:均为时间秒数大小的数组);

4. 将新增加的时间也push到开始时间和结束时间数组中;

5. 将开始和结束时间数组分别升序排序;

6. 循环遍历数组,从开始时间的第二个元素去比较结束时间的第一个元素,如果小于,就代表时间段有交叉,直接跳出,不然就继续遍历,遍历结束,说明时间没有重复,可以提交

function sortNumber(a,b) {    
    return a - b;//数值型数组大小升序排序
}
function getWorkTimeData(){    
    var i=[];    
    var n=[];	
    var rowData = {};	
    if(!$("#worktimeForm").validationEngine('validate')) {		
        return null;//非空验证
    }	
    var whatDayIsIt=$('#whatDayIsIt').val();//获取今天是周几    
    varstartWorkTime=document.getElementById('startTime');    
    var endWorkTime=document.getElementById('endTime');   
    var starText=startTime.options[startTime.selectedIndex].text;//开始时间   
    var endText=endTime.options[endTime.selectedIndex].text;//结束时间    
    i= startTimeText.split(":");    n= endTimeText.split(":");   
    var startTimeSecond=parseInt(i[0])*60+parseInt(i[1]);//开始时间秒数 
    var endTimeSecond=parseInt(n[0])*60+parseInt(n[1]);//结束时间秒数    
    if(startTimeSecond>=endTimeSecond){
        alert('结束时间必须大于开始时间');           
        return	
    }    
    var rowDataGrid=$("#targetGrid").jqGrid("getRowData");    
    var endTimeSecondArr=[];   
    var startTimeSecondArr=[];   
    if(rowDataGrid.length>0){        
        for(var i=0;i<rowDataGrid.length;i++){
            if(rowDataGrid[i].week==whatDayIsIt){                
                var ss= rowDataGrid[i].startTime.split(":");  ​
                var nn= rowDataGrid[i].endTime.split(":");   ​
                var startTimeSecondA=parseInt(ss[0])*60+parseInt(ss[1]);                
                var endTimeSecondA=parseInt(nn[0])*60+parseInt(nn[1]); ​
                startTimeSecondArr.push(startTimeSecondA);//已加入到表格中的开始时间秒数                
                endTimeSecondArr.push(endTimeSecondA)            
            }        
        }  ​
        startTimeSecondArr.push(startTimeSecond);//将当前选择的开始时间秒数加入到的开始时间秒数数组中        
        endTimeSecondArr.push(endTimeSecond);  ​
        var begin = startTimeSecondArr.sort(sortNumber);   ​
        var over = endTimeSecondArr.sort(sortNumber);   ​
        for(var k=1;k<begin.length;k++){     ​
            if (begin[k] < over[k-1]){    ​
                alert('同一天内所有的上下班时间段不能有重合');               
                return false; ​
            }        
        }    
    }    
    if(tplid){//修改​
        rowData.tmpId=tplid;    
    }else {//新增        
        rowData.tmpId='';    
    }    
    if($("#rowId").val()){ ​
        rowData.id=$("#rowId").val();    
    }else {        
        rowData.id='';    
    }    
    rowData.week=whatDayIsIt;​
    rowData.startTime=startTimeText; ​
    rowData.endTime=endTimeText;    
    return rowData;
}

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值