检查时间范围是否重叠


Check if timeranges overlap

我需要检查输入的时间段是否与另一个时间段重叠这个线程PHP函数检查时间之间的给定范围?给出一个简单的解释,说明如何检查一个日期是否具有

范围。

我将第二个示例函数/if-case修改为:

    if(check_slot_range('2014-06-26 06:00:00','2014-06-26 10:00:00', '2014-06-26 07:00:00') OR check_slot_range('2014-06-26 06:00:00','2014-06-26 10:00:00', '2014-06-26 09:00:00')){
      echo "OVERLAP";
    }else{
      echo "NO OVERLAP";
    }

只有以下部分有重叠:

  • "2014-06-26 07:00:00"到"2014-06-26 09:00:00"

  • "2014-06-26 05:00:00"到"2014-06-26 09:00:00"

  • "2014-06-26 07:00:00"到"2014-06-26 11:00:00"

这个不抛出重叠:

  • Range '2014-06-26 05:00:00' to '2014-06-26 11:00:00'

我需要如何更改if子句来捕获最后一个示例的重叠?

澄清一下,这里是比较

的函数
    function check_slot_range($start_date, $end_date, $todays_date)
{
  $start_timestamp = strtotime($start_date);
  $end_timestamp = strtotime($end_date);
  $today_timestamp = strtotime($todays_date);
  return (($today_timestamp >= $start_timestamp) && ($today_timestamp <= $end_timestamp));

}

要检查重叠,只需检查low1 <= high2 AND high1 >= low2(而不是上面示例中的date >= low AND date <= high)

因此,您可以创建一个新函数来检查此条件,如下所示:
function check_ranges_overlap($start_date_1, $end_date_1, $start_date_2, $end_date_2)
{
    $start_timestamp_1 = strtotime($start_date_1);
    $end_timestamp_1 = strtotime($end_date_1);
    $start_timestamp_2 = strtotime($start_date_2);
    $end_timestamp_2 = strtotime($end_date_2);
    return (($start_timestamp_1 <= $end_timestamp_2) && ($end_timestamp_1 >= $start_timestamp_2));
}