【问题标题】:Find how much time exists within two unix timestamps找出两个 unix 时间戳中存在的时间
【发布时间】:2015-03-12 08:16:36
【问题描述】:

我需要找出一定范围内两个不同的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 时间戳,只需使用 strtotime 减去它们之间的时间。
  • 我已经在用strtotime了,
  • 这是我正在使用的代码,但我不确定逻辑是否合理。请假设这些值已经是 strtotime 格式。 pastebin.com/n6DF3Dw7
  • 我刚刚更新了问题

标签: php logic


【解决方案1】:

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

从“逻辑”的角度来看...
鉴于您的时间已经转换为 Unix 时间戳,T1 和 T2 用于旅行,S1 和 S2 用于待机。
旅行时间是T2-T1
待机时间为S2-S1
如果((S1&lt;T2) &amp;&amp; (S2&gt;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 );

【讨论】:

  • Gavin,你愿意看看我们的代码吗?
  • @V4n1ll4,这是一个模糊的要求......以什么身份?
  • 我们正在努力解决我们的一个应用程序中的逻辑问题,您有兴趣看看吗?
猜你喜欢
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多