Php 如果时间戳范围在时间戳范围内
我有一个时间戳和持续时间数组,还有一个占用时间戳数组。 我现在需要检查这些时间戳是否冲突 基本上,$start[]不能在任何$occumped[]时间戳内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[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库上构建了类似的东西,比如一个。谢谢你的回复。我将查看间隔树。看来这可能是很好的未来