如果时间戳范围在时间戳范围内

时间:2017-02-13 08:23:02

标签: php math timestamp

我有一组时间戳和持续时间以及一组占用时间戳。 我现在需要检查这些时间戳是否发生冲突。

基本上$ start []不能在任何$ occupied []时间戳

doc = view.GetDocumentByKey(['John', 'Doe'])

上述$start[0] = 1486987200; // 12:00 $duration[0] = 3600; $start[1] = 1487008800; // 18:00 $duration[1] = 7200; $occupied[0] = 1486989000; // 12:30 $ocDuration[0] = 3600; $occupied[1] = 1487019600; // 21:00 $ocDuration[1] = 7200; 是不可能的,因为$start[0]在1小时(3600秒)的范围内,但$occupied[0]是可能的,因为它从18:00开始,并且结束2小时后。

enter image description here

另一种情况可能是$start[1]$occupied[0]重叠:

enter image description here

所以问题是,我该怎么做这样的检查?

2 个答案:

答案 0 :(得分:1)

如果您将$ start和$ duration用作非数组变量,则可以使用下面的这个。否则,只需编写一个双循环。

$start[0] = 1486987200; // 12:00
$duration[0] = 3600;

$start[1] = 1487008800; // 18:00
$duration[1] = 7200;

$occupied[0] = 1486989000; // 12:30
$ocDuration[0] = 3600;

$occupied[1] = 1487019600; // 21:00
$ocDuration[1] = 7200;

$occupied[2] = 1486989000; // 12:30
$ocDuration[2] = 23400;

function checkOccupancy($start, $duration, $occupied, $ocDuration){
    $ocLength = count($occupied);
    for($i = 0; $i <= $ocLength; $i++){
        $ocEnd = $occupied[$i] + $ocDuration[$i];
        $end = $start + $duration;
        if(($start > $occupied[$i] && $start < $ocEnd) || ($end > $occupied[$i] && $end < $ocEnd) ){
            return "Not Possible";
        }
    }
    return "Possible";
}

echo checkOccupancy($start[0], $duration[0], $occupied, $ocDuration);
echo checkOccupancy($start[1], $duration[1], $occupied, $ocDuration);

答案 1 :(得分:0)

function checkTimeSlot($occupied, $occDuration, $checkStart, $checkDuration)
{
    $isValid = true;
    foreach($occupied as $key => $occStartTime)
    {
        $occEndTime = $occStartTime + $occDuration;
        if($checkStart > $occStartTime || $checkStart < $occEnd || $occEndTime > $occStartTime || $occEndTime < $occEndTime)
        {
            $isValid = false;
        }
    }

    return $isValid;
}


$isValid = [];
foreach ($start as $key => $checkStart)
{
    $isValid[$key] = checkTimeSlot($checkStart, $duration[$key]);
}