我想查看时间范围是否重叠,如果有,则返回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;
}
}
答案 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
我不知道你的时间范围是否超过午夜,但如果他们这样做,你需要将时间添加到时间戳进行比较,否则你会得到意想不到的结果。