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;
}