Node.js 如果nodejs中给出了忙时隙,如何找到一天中的空闲时隙

Node.js 如果nodejs中给出了忙时隙,如何找到一天中的空闲时隙,node.js,timeslots,Node.js,Timeslots,例如,特定日期的诊所工作时间如下: var workingStartTime = 2018-05-12T08:00:00.000Z; var workingEndTime = 2018-05-12T22:00:00.000Z; var busySlots = [ { start_time: '2018-05-12T14:30:00.000Z',end_time:'2018-05-12T17:45:00.000Z' }, { start_time: '2018-05-12T20:30:

例如,特定日期的诊所工作时间如下:

var workingStartTime = 2018-05-12T08:00:00.000Z; 
var workingEndTime = 2018-05-12T22:00:00.000Z;
var busySlots = 
[ { 
start_time: '2018-05-12T14:30:00.000Z',end_time:'2018-05-12T17:45:00.000Z' 
},
{ 
start_time: '2018-05-12T20:30:00.000Z',end_time: '2018-05-12T21:45:00.000Z' 
}]
医生在同一日期已安排的预约如下:

var workingStartTime = 2018-05-12T08:00:00.000Z; 
var workingEndTime = 2018-05-12T22:00:00.000Z;
var busySlots = 
[ { 
start_time: '2018-05-12T14:30:00.000Z',end_time:'2018-05-12T17:45:00.000Z' 
},
{ 
start_time: '2018-05-12T20:30:00.000Z',end_time: '2018-05-12T21:45:00.000Z' 
}]
我需要获取从
2018-05-12T08:00:00.000Z
2018-05-12T22:00:00.000Z
nodejs中代码行数最少的一天的计时

以下问题与我的查询类似:


但是上面的代码是用php编写的,我需要用nodejs编写的代码。

下面的代码可能没有经过优化,但对我来说很有用:

function (cb){

         var duration = 60;
         var freeSlots = [];

         var workingStartTime = 2018-05-12T08:00:00.000Z; 
         var workingEndTime = 2018-05-12T22:00:00.000Z;

         var busySlots = [];
         busySlots.push({ start_time: "2018-05-12T14:30:00.000Z",end_time: "2018-05-12T17:45:00.000Z" }) ;
         busySlots.push({ start_time: "2018-05-12T20:30:00.000Z",end_time: "2018-05-12T21:45:00.000Z" }) ;

         var beginAt = workingStartTime;
         var overAt = workingEndTime;
         var count = 0;
         var last = busySlots.length;

         async.forEach(busySlots, function (item, callback){

             /*** Library funcition to gind difference between two dates (Minutes) ***/
             var diff = libFunc.getRange(beginAt, item.start_time,TIME_UNITS.MINUTES);
             if(diff > duration){
               let free = {"start_time":beginAt , "end_time":item.start_time};
               freeSlots.push(free);
               beginAt = item.end_time;
               count += 1;

               /** Process for end slot **/
               if(last == count){
                 var diff = libFunc.getRange(item.end_time, overAt, TIME_UNITS.MINUTES);
                 if(diff > duration){
                   let free = {"start_time":item.end_time , "end_time":overAt};
                   freeSlots.push(free);
                   callback();
                 }else{
                   callback();
                 }
               }else{
                 callback();
               }
               /** Process for end slot **/

             }else{
               beginAt = item.end_time;
               count += 1;

               /** Process for end slot **/
               if(last == count){
                 var diff = libFunc.getRange(item.end_time, overAt, TIME_UNITS.MINUTES);
                 if(diff > duration){
                   let free = {"start_time":item.end_time , "end_time":overAt};
                   freeSlots.push(free);
                   callback();
                 }else{
                   callback();
                 }
               }else{
                 callback();
               }
               /** Process for end slot **/
             }

         }, function(err) {
           // console.log(freeSlots);
             cb(null);
         });
       },

您可能需要检查moment.js库。它有很多功能,提供更容易的日期/时间操作。这对你有帮助,你解决了吗?我现在正面临这个问题