2016-10-05 66 views
1

我需要确定用户选定的时间(开始时间,结束时间)是否在约会时间数组中。如何检查选定的时间是在给定的时间范围内使用Javascript

我从Exchange Web服务得到了约会时间和输出是:

[{Status: "Busy", StartTime: "2016-10-05T11:00:00+10:00", EndTime: "2016-10-05T11:30:00+10:00"},{Status: "Busy", StartTime: "2016-10-05T13:00:00+10:00", EndTime: "2016-10-05T15:30:00+10:00"}] 

该用户已选择的时间是:

var start_time = Date.parse("2016-10-05T14:30"); 
var end_time = Date.parse("2016-10-05T15:00"); 

到目前为止,我曾尝试以下,但我不知道这是否是正确的方法:

var data = [{Status: "Busy", StartTime: "2016-10-05T11:00:00+10:00", EndTime: "2016-10-05T11:30:00+10:00"},{Status: "Busy", StartTime: "2016-10-05T13:00:00+10:00", EndTime: "2016-10-05T15:30:00+10:00"}]; 

for (var key in data) 
{ 
    var obj = data[key]; 
    if (obj['Status'] == 'Busy') 
    { 
    check_open_time_val = Date.parse(obj['StartTime']); 
    check_close_time_val = Date.parse(obj['EndTime']); 

    if (check_open_time_val > open_time) 
    { 
     console.log('Is Busy'); 
     // break; 
     return true; 
     } 
    }else { 
     console.log(obj['Status'] + 'XXXXX'); 
    } 
    } 

如何检查start_t时间和结束时间不在任何预约时间。 感谢

+0

是你想检测是否有任何重叠的用户时间范围和繁忙的时间范围? – Phil

+0

谢谢@Phil,那正是我所追求的。 – snowflakes74

回答

1

您可以结合this logicArray.prototype.some

let data = [{Status: "Busy", StartTime: "2016-10-05T11:00:00+10:00", EndTime: "2016-10-05T11:30:00+10:00"},{Status: "Busy", StartTime: "2016-10-05T13:00:00+10:00", EndTime: "2016-10-05T15:30:00+10:00"}], 
 
    start_time = Date.parse("2016-10-05T14:30:00+10:00"), 
 
    end_time = Date.parse("2016-10-05T15:00:00+10:00"); 
 

 
let isClash = data.some(obj => { 
 
    let s = Date.parse(obj.StartTime), e = Date.parse(obj.EndTime); 
 

 
    return obj.Status === 'Busy' && start_time <= e && end_time >= s; 
 
}); 
 

 
console.log('is clash?', isClash);

请注意,我对准你start_timeend_time的UTC偏移,所以你可以看到,它的工作原理:)

+0

绝对精彩,,,完美谢谢你 – snowflakes74

相关问题