2017-08-26 84 views
1

enter image description here檢測重疊的時間範圍在PHP

我想看看時間範圍重疊,如果他們這樣做,真的應該返回,否則爲false。如果我選擇了這個時間範圍:

10:30:00 - 11:30:00

然後我需要檢查,如果它不重疊另一個時間範圍。例如:

10:30:00 - 11:30:0010: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; 
    } 
} 

回答

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:20", "12:30")); // false 

Demo

我不知道,如果你的時間範圍內去了午夜,但如果他們這樣做,你需要一天加入時間戳來進行比較,否則你會得到意想不到的結果。

+0

我需要檢查$ as- $ ae附帶$ bs- $是否 –

+0

對不起,我不理解你。這個例子不適合你嗎?或者它不是你想要的? – ishegg

+0

示例正在工作,但結果不是我想要的 –