js时间段计算,多组,多组间重叠

1,518 阅读2分钟














if (new RegExp("(" + i + ")").test(format))

format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? n : ("00" + n).substr(("" + n).length));

}

return format;

};



function GetDateDiff(startTime, endTime, diffType) {

//将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式

startTime = startTime.replace(/\-/g, "/");

endTime = endTime.replace(/\-/g, "/");

//将计算间隔类性字符转换为小写

diffType = diffType.toLowerCase();

var sTime = new Date(startTime); //开始时间

var eTime = new Date(endTime); //结束时间

//作为除数的数字

var timeType = 1;

switch (diffType) {

case "second":

timeType = 1000;

break;

case "minute":

timeType = 1000 * 60;

break;

case "hour":

timeType = 1000 * 3600;

break;

case "day":

timeType = 1000 * 3600 * 24;

break;

default:

break;

}

return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(timeType));

}



function getDateArr(startTime, endTime, diffMinute) {

var dataTimeArr = new Array();

for (i = 0; i < diffMinute; i++) {

var now = new Date(startTime);

now.setMinutes(now.getMinutes() + i);

dataTimeArr.push(now.format("yyyy-MM-dd hh:mm"));

}

return dataTimeArr;

}



function getArrayDiff(arr1, arr2) {

var temp = []; //临时数组1

var temparray = [];//临时数组2

for (var i = 0; i < arr2.length; i++) {

temp[arr2] = true;//巧妙地方:把数组B的值当成临时数组1的键并赋值为真

};

for (var i = 0; i < arr1.length; i++) {

if (!temp[arr1]) {

temparray.push(arr1);//巧妙地方:同时把数组A的值当成临时数组1的键并判断是否为真,如果不为真说明没重复,就合并到一个新数组里,这样就可以得到一个全新并无重复的数组

};

};

return temparray;

}



function reduceFun(data, timeStr) {

var rtData = data;

var restTimeArr = timeStr.split(';');

for (j = 0; j < restTimeArr.length; j++) {

var timeArr = restTimeArr[j].split('-');

console.log('除去:', timeArr[0], '--', timeArr[1]);

var start = '2018-04-19 ' + timeArr[0];

var end = '2018-04-19 ' + timeArr[1];

var diffMinute2 = GetDateDiff(start, end, 'minute');

var result2 = getDateArr(start, end, diffMinute2);

rtData = getArrayDiff(rtData, result2);

console.log('余下:', rtData.length);

console.log('');

}

return rtData;

}



var startTime = '2018-04-18 23:00';

var endTime = '2018-04-19 08:00';

var restTime = '04:20-05:00;03:20-04:30;07:30-08:00';

var checkTime = '02:00-02:30;07:00-08:00';



var diffMinute = GetDateDiff(startTime, endTime, 'minute');

var result = getDateArr(startTime, endTime, diffMinute);

console.log('计算:', startTime, '--', endTime);

console.log('总时间:', result.length);

console.log('');



console.log('除去交班时间:', restTime);

result = reduceFun(result, restTime);


console.log('除去日检点时间:', checkTime);

result = reduceFun(result, checkTime);



效果预览:



www.ifrontend.net/read.php?ti…