【问题标题】:Check time interval between two times检查两次之间的时间间隔
【发布时间】:2014-09-30 03:34:49
【问题描述】:

我需要检查两个时间段之间的时间间隔。即需要在客户端阻止一个人的任命。

我有 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

有人可以帮忙吗?

提前致谢

【问题讨论】:

  • 为什么要使用单独的数组来表示 from/to,而不是使用 fromto 时间的“块”对象,您可以根据需要锁定或解锁?
  • 您好,感谢您的回复。你能解释一下吗?我们当然可以避免两个数组
  • 使用类似var Timeslot = new function(f,t) { this.from=f; this.to=t; this.reserved=false; }; Timeslot.prototype = { toggle: function() { this.reserved = !this.reserved; }}; 的东西,现在您可以简单地构建new Timeslot(...,...) 对象并根据是否被占用来切换每个插槽。添加一个函数来查看时间是否落在原型的一个槽中,然后就可以开始了。

标签: javascript datetime time


【解决方案1】:

在下面的代码中,为了便于比较,将 hh:mm 格式的时间转换为分钟

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

【讨论】:

    【解决方案2】:

    遍历您的预留时间并检查每个时间段是否与查询时间段重叠。

    如果第一个开始在第二个结束之前,并且第一个结束在第二个开始之后,则两个句点重叠。

    【讨论】:

      【解决方案3】:

      有预约的时间段是(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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-12
        • 1970-01-01
        • 1970-01-01
        • 2015-06-16
        • 1970-01-01
        • 2017-01-30
        相关资源
        最近更新 更多