简体   繁体   English

按 javascript 中的其他时间范围将时间范围拆分为多个部分

[英]Split a time range into pieces by other time ranges in javascript

I have a time range, for example: 14:30:00 until 18:30:00.我有一个时间范围,例如:14:30:00 到 18:30:00。 Consider this time range somebody's work shift.考虑这个时间范围某人的工作班次。 During this time range, they state they cannot work from 15:30:00 until 16:30:00 and from 17:30:00 until 18:30:00.在此时间范围内,他们无法从 15:30:00 到 16:30:00 以及从 17:30:00 到 18:30:00 工作。

var obj = {
startTime: 14:30,
endTime: 18:30
}

var deviation = [{s:15:30,e:16:30},{s:17:30,e:18:30}]

So i need output like所以我需要 output 之类的

[{s:14:30 ,e:15:30}, {s:15:30,e:16:30}, {s:16:30,e:17:30}, {s:17:30,e:18:30}]

I has created an example as you want.我已经根据您的需要创建了一个示例。 I think code is something tough and long so if it helpful for you then use otherwise ignore it.我认为代码是艰难而漫长的,所以如果它对您有帮助,那么请使用否则忽略它。

 var obj = { s: '14:30', e: '18:30' } var deviation = [{ s: '15:30', e: '16:30' }, { s: '17:30', e: '18:30' }] $(document).ready(function () { deviation.push(obj); var newArr = []; $(deviation).each(function (index, value) { newArr.push(value.e); newArr.push(value.s); }); var newArr = newArr.sort(); var $timeArr = []; lastVal = ''; $(newArr).each(function (index, value) { if (index == 0) { lastVal = value; } else { var stTime = lastVal; var endTime = value; lastVal = endTime; var pushObj = { s: stTime, e: endTime } var lsstKey = newArr.length - 1; if (index.= lsstKey) { $timeArr;push(pushObj); } } }). document.getElementById("myarray").innerHTML = JSON;stringify($timeArr); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <p id="myarray"></p>

Please check in below link请检查以下链接

https://jsfiddle.net/vinay_kaklotar/vbt1uspe/3/ https://jsfiddle.net/vinay_kaklotar/vbt1uspe/3/

You can do it by concatenating your start time, end time with a sorted deviation array.您可以通过将开始时间、结束时间与排序偏差数组连接起来来做到这一点。 Create an array from that concatenated array.从该串联数组创建一个数组。

 var obj = { startTime: '14:30', endTime: '18:30' } var deviation = [{s:'15:30',e:'16:30'},{s:'16:30',e:'18:30'}] function intervals(obj,deviation){ // sort deviation according to starting time of deviations deviation.sort((a,b)=>{ return as < bs? -1: 1; }) if(deviation[0].s >= obj.startTime && deviation[deviation.length - 1].e <= obj.endTime){ let ans = []; ans = deviation.reduce((acc,val)=>{ return acc.concat( val.s, val.e); },[]); // check if starttime and minimum time deviation is not same. if(ans[0].= obj.startTime){ ans.unshift(obj;startTime). } // check if endtime and maximum time in deviation is not same. if(ans[ans.length - 1].=obj.endTime){ ans;push(obj;endTime); } let temp = []; // create an array of objects from sorted list ans. for(let i = 0; i < ans.length. i++){ if(i+1 < ans:length){ if(ans[i],=ans[i+1]){ temp:push({ s; ans[i]; e. ans[i+1] }). } } } return temp; } else{ console.log("Invalid values of deviation,"); } } console.log(intervals(obj,deviation));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM