2014-09-30 2 views
0

Мне нужно проверить временной интервал между двумя периодами времени. т.е. необходимо заблокировать назначение лица на стороне клиента.Проверить временной интервал между двумя раз

У меня есть 2 массивы

var fromTimings=["8:00","12:00","","16:00"]; 
var toTimings=["9:10","01:00","","19:00"]; 

Это блоки, которые уже забронированы. т.е. первая встреча забронирована с 8:00 до 9:10, вторая с 12:00 до 1:00 и т. д.

Все назначения хранятся в двух массивах в вышеуказанном формате.

Теперь мне нужно проверить пользовательский слот.

т.е. если пользователь вошел как Fromtime = 9:15 и 10:00, то должны вернуться/показать доступные

логика следующим

fromTime | toTime  | result 
------------+--------------+----------- 
7:00  | 7:59  | true 
8:10  | 10:00  | false (already meeting between 8:00 to 9:10) 
19:01  | 23:59  | true 

Может кто-нибудь, пожалуйста, помогите?

Заранее спасибо

+2

Почему вы используете отдельные массивы из/вместо вместо «блокировать» объекты с 'от' и' to' временем, которое вы можете заблокировать или разблокировать по мере необходимости? –

+0

Привет, спасибо за ваш ответ. не могли бы вы немного объяснить? мы можем избежать двух массивов, конечно, – ramesh

+0

использовать что-то вроде 'var Timeslot = new function (f, t) {this.from = f; this.to = т; this.reserved = ложь; }; Timeslot.prototype = {toggle: function() {this.reserved =! This.reserved; }}; ', и теперь вы можете просто создать' новый объект Timeslot (..., ...) 'и переключить каждый слот в зависимости от того, взята ли она. Добавьте функцию, чтобы увидеть, попадает ли время в слот к прототипу, и вы уходите. –

ответ

1

В коде ниже, для простоты сравнения чч: мм отформатированные время преобразуется в мин

//just for logging the messages 
 
var log = (function() { 
 
    var $log = $('#log'); 
 
    return function(msg) { 
 
    $('<p/>', { 
 
     text: msg 
 
    }).appendTo($log) 
 
    } 
 
})(); 
 

 

 
var fromTimings = ["8:00", "12:00", "", "16:00"]; 
 
var toTimings = ["9:10", "01:00", "", "19:00"]; 
 

 
function test(from, to) { 
 
    var f = toMins(from), 
 
    t = toMins(to), 
 
    ft, tt; 
 
    for (var i = 0; i < fromTimings.length; i++) { 
 
    ft = toMins(fromTimings[i]), tt = toMins(toTimings[i]); 
 
    if ((f >= ft && f <= tt) || (t >= ft && t <= tt)) { 
 
     return false; 
 
    } 
 
    } 
 
    return true; 
 
} 
 

 
function toMins(time) { 
 
    var parts = time.split(':'); 
 
    return (+parts[0] * 60 + +parts[1]) || 0; 
 
} 
 

 
function testTime(from, to) { 
 
    log(from + '-' + to + ': ' + test(from, to)) 
 
} 
 

 
testTime('07:00', '07:59'); 
 
testTime('8:10', '10:00'); 
 
testTime('19:01', '23:59');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="log"></div>

+0

WOW !!! Большое спасибо – ramesh

2

Loop через ваши зарезервированные раз и проверять каждый период для перекрытия с периодом запроса.

Два периода перекрываются, если начало первого - до конца второго и конец первого после начала второго.

0

Период времени, который имеет назначение (8: 00 ~ 9: 10), (12:00 ~ 13:00) и (16: 00 ~ 19: 00). Поэтому, если интервал времени приведены в (А ~ В):

if(B<8) 
return true; 
if(A>8&&B<9:10) 
return true; 
if(A>12&&B<13) 
return ture; 
if(A>13&&B<16) 
return true; 
if(A>19) 
return true 
return false; 
Смежные вопросы