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);
效果预览: