我需要检查输入的时间段是否与另一个时间段重叠这个线程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));
}