查找两个 unix 时间戳中存在多少时间

Find how much time exists within two unix timestamps

我需要找出在一定范围内两个不同的 unix 时间戳之间相差多少秒。

例如:

旅行开始:05:00 网站到达:07:00 待机时间:06:00 - 09:00

我需要找出用户行驶了多少秒以及他待命了多少秒。

上面的结果应该输出:

Travel = 3600 seconds (05:00 - 06:00)
Standby = 3600 seconds (06:00 - 07:00)

另一个例子:

旅行开始:10:00 网站到达:11:30 待机时间:06:00 - 09:00

Travel = 5400 seconds (10:00 - 11:30)
Standby = 0 seconds

我认为不正确的示例代码:

if($travel_start_time >= $standby_start_time)
{
    if($first_site_arrival <= $standby_end_time)
    {
        $travel_during_standby = max($first_site_arrival-$travel_start_time, 0);
    }
    elseif($first_site_arrival >= $standby_end_time)
    {
        $travel_during_standby = max($first_site_arrival-$standby_end_time, 0);
    }
}
else
{
    $travel_during_standby = max($first_site_arrival-$standby_start_time, 0);
}

我想你是在问'两个可能重叠的 Unix 时间戳范围共有多少时间?'

从'Logic'的角度来看...
假设你的时间已经转换成Unix时间戳,T1和T2代表旅行,S1和S2代表待机。
旅行时间是T2-T1
待机时间为S2-S1
如果((S1<T2) && (S2>T1))
会有重叠 如果有重叠,则待机时的行程为(Min(T2,S2) - Max(T1,S1))

将逻辑翻译成 PHP 相当简单...

$travel_during_standby = ((($standby_start_time < $travel_end_time)&&($standby_end_time > $travel_start_time)))? (Min($travel_end_time,$standby_end_time) - Max($travel_start_time,$standby_start_time)) : 0;


另一种更直接的方法是盲目计算重叠并忽略任何负面结果...

$travel_during_standby = Max( (Min($travel_end_time,$standby_end_time) - Max($travel_start_time,$standby_start_time)) , 0 );