2014-09-30 67 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;