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

Php 如果时间戳范围在时间戳范围内,php,math,timestamp,Php,Math,Timestamp,我有一个时间戳和持续时间数组,还有一个占用时间戳数组。 我现在需要检查这些时间戳是否冲突 基本上,$start[]不能在任何$occumped[]时间戳内 $start[0] = 1486987200; // 12:00 $duration[0] = 3600; $start[1] = 1487008800; // 18:00 $duration[1] = 7200; $occupied[0] = 1486989000; // 12:30 $ocDuration[0] = 3600; $o

我有一个时间戳和持续时间数组,还有一个占用时间戳数组。 我现在需要检查这些时间戳是否冲突

基本上,$start[]不能在任何$occumped[]时间戳内

$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]
是不可能的,因为
$occulated[0]
在其1小时(3600秒)的范围内,但是
$start[1]
是可能的,因为它在18:00开始,2小时后结束

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

所以问题是,我如何进行这样的检查?

函数checkTimeSlot($occDuration、$occDuration、$checkStart、$checkDuration)
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]);
}
{ $isValid=true; foreach($key=>$occstartime) { $occEndTime=$occstartime+$occDuration; 如果($checkStart>$occStartTime | |$checkStart<$occEnd | |$occEndTime>$occStartTime | |$occEndTime<$occEndTime) { $isValid=false; } } 返回$isValid; } $isValid=[]; foreach($start as$key=>$checkStart) { $isValid[$key]=checkTimeSlot($checkStart,$duration[$key]); }
如果将$start和$duration用作非数组变量,则可以使用下面的变量。否则,只需编写一个double for循环

$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);
$start[0]=1486987200;//12:00
$duration[0]=3600;
$start[1]=1487008800;//18:00
$duration[1]=7200;
$占用[0]=1486989000;//12:30
$ocDuration[0]=3600;
$占用[1]=1487019600;//21:00
$ocDuration[1]=7200;
$占用[2]=1486989000;//12:30
$ocDuration[2]=23400;
功能检查占用率($start、$duration、$ocDuration){
$ocLength=计数($ocLength);
对于($i=0;$i$已占用[$i]&&$start<$ocEnd)| |($end>已占用[$i]&&$end<$ocEnd)){
返回“不可能”;
}
}
返回“可能”;
}
echo CheckOccupation($start[0],$duration[0],$ocDuration,$ocDuration);
echo CheckOccupation($start[1],$duration[1],$ocDuration,$ocDuration);

我喜欢对这类事情的描述和演示,它是一种优秀的数据结构。我不知道是否有任何PHP实现;但是我已经成功地在Python库上构建了类似的东西,比如一个。谢谢你的回复。我将查看间隔树。看来这可能是很好的未来