2014-09-30 109 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

爲什麼使用from/to的單獨數組代替「from」和'to'時間的「block」對象,您可以根據需要鎖定或解鎖? – 2014-09-30 03:36:36

+0

嗨,感謝您的回覆。你能解釋一下嗎?我們可以避免兩個數組當然 – ramesh 2014-09-30 03:40:49

+0

使用類似'var Timeslot = new function(f,t){this.from = f; this.to = T; this.reserved = FALSE; }; Timeslot.prototype = {toggle:function(){this.reserved =!this.reserved; }};'現在你可以簡單地構建'新的Timeslot(...,...)'對象,並根據它是否被佔用來切換每個插槽。添加一個函數來查看時間是否落入原型的一個插槽中,然後離開。 – 2014-09-30 03:52:10

回答

1

在下面的代碼,用於比較的容易性的HH:格式化的時間毫米轉換爲分鐘

//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

哇!萬分感謝 – ramesh 2014-09-30 05:46:41

2

遍歷您的保留時間和檢查每個週期與查詢週期重疊。

如果第一個的開始在第二個結束之前,並且在第二個開始之後的第一個結束,則兩個時間段重疊。

0

預約時間爲(8:00〜9:10),(12:00〜13:00),(16:00〜19:00)。因此,如果給定的時間間隔是(A〜B):

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;