检测PHP中的重叠时间范围

时间:2017-08-26 13:48:45

标签: php

enter image description here

我想查看时间范围是否重叠,如果有,则返回true,否则返回false。如果我选择了这个时间范围:

  

10:30:00 - 11:30:00

然后我需要检查它是否与另一个时间范围重叠。例如:

  

10:30:00 - 11:30:00 10:30:00 - 12:30:00重叠所以我必须禁用插槽但我不知道怎么做正确的比较。

我有以下功能,但我认为它不起作用,因为我希望它能够工作。

  $as = $selectedSlot['slot_start'];
  $ae = $selectedSlot['slot_end'];
  $bs = $DB_slots['slot_start'];
  $be = $DB_slots['slot_end'];


function checkSlotRange($as,$ae,$bs,$be){
  $as = strtotime($as);
  $ae = strtotime($ae);
  $bs = strtotime($bs);
  $be = strtotime($be);
  if($as <= $bs && $ae <= $be){
    return true;
  }else{
  return false;
  }  
}

1 个答案:

答案 0 :(得分:2)

你有时间检查逻辑错误。您需要检查A的开始时间是否晚于B的开始时间,并且A的结束时间早于B的结束时间。

<?php
function checkSlotRange($as,$ae,$bs,$be){
    $as = strtotime($as);
    $ae = strtotime($ae);
    $bs = strtotime($bs);
    $be = strtotime($be);
    return ($as >= $bs && $ae <= $be); 
}
var_dump(checkSlotRange("10:30", "11:30", "09:30", "12:30")); // true
var_dump(checkSlotRange("10:30", "11:30", "11:40", "12:30")); // false

Demo

我不知道你的时间范围是否超过午夜,但如果他们这样做,你需要将时间添加到时间戳进行比较,否则你会得到意想不到的结果。