Date.prototype.format = function (format) { var args = { "M+": this.getMonth() + 1, "d+": this.getDate(), "h+": this.getHours(), "m+": this.getMinutes(), "s+": this.getSeconds(), "q+": Math.floor((this.getMonth() + 3) / 3), //quarter "S": this.getMilliseconds() }; if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var i in args) { var n = args; 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… 转载于:https://juejin.im/post/5c7280d851882562547bb190