PHP数组中相邻行程间隔时间计算问题咨询
解决数组中相邻行程的时间间隔计算问题
看起来你是想计算相邻两个行程之间的空档时间——也就是前一个行程到达后,到下一个行程出发的这段间隔,对吧?你的原代码有点小偏差,我来帮你修正一下。
原代码的问题
你原来的foreach循环是遍历每个行程,计算的是当前行程自己的到达时间和出发时间的差,这其实是单个行程的耗时,不是你要的相邻行程间隔。而且最后一个行程没有下一个出发时间,完全不需要计算它。
修正后的代码方案
这里我用PHP的DateTime类来处理时间,比手动处理时间戳更可靠,也更容易按需格式化结果:
<?php $data = [ '0' => [ 'depart' => '2021-02-09 10:50:00', 'arrival' => '2021-02-09 13:10:00', ], '1' => [ 'depart' => '2021-02-09 14:50:00', 'arrival' => '2021-02-09 15:30:00', ], '2' => [ 'depart' => '2021-02-09 18:20:00', 'arrival' => '2021-02-09 19:40:00', ] ]; $diff_time = []; // 循环到倒数第二个元素,因为要和下一个行程配对计算 for ($i = 0; $i < count($data) - 1; $i++) { // 实例化DateTime对象,方便安全地计算时间差 $currentArrival = new DateTime($data[$i]['arrival']); $nextDeparture = new DateTime($data[$i+1]['depart']); // 计算时间差,得到包含细分信息的DateInterval对象 $interval = $currentArrival->diff($nextDeparture); // 按需格式化时间差,这里提供两种常用方式: // 方式1:转为总分钟数 $totalMinutes = $interval->days * 24 * 60 + $interval->h * 60 + $interval->i; $diff_time[$i] = $totalMinutes . ' 分钟'; // 方式2:按"X小时Y分钟"的友好格式显示 // $diff_time[$i] = "{$interval->h}小时{$interval->i}分钟"; } // 输出最终结果 print_r($diff_time); ?>
代码说明
- 循环范围控制:用
for循环代替foreach,循环终止在count($data)-1(倒数第二个元素),避免越界访问不存在的下一个行程。 - 时间处理:
DateTime是PHP官方推荐的时间处理工具,能自动兼容各种合法时间格式,不会出现时间戳溢出的问题。 - 时间差格式化:
diff()方法返回的DateInterval对象包含了天、小时、分钟等细分的时间差,你可以根据业务需求自由调整输出格式。
如果你想用自己的timeDifference函数
如果你已经有自己实现的timeDifference函数(假设它接收两个时间字符串并返回时间差),只需要调整循环内的参数传递即可:
$diff_time = []; for ($i = 0; $i < count($data) - 1; $i++) { // 注意参数顺序:前一个行程的到达时间,后一个行程的出发时间 $diff_time[$i] = timeDifference($data[$i]['arrival'], $data[$i+1]['depart']); }
这样就能得到你想要的两个目标时间差:
$diff_time[0]对应[0]的到达时间与[1]的出发时间的间隔$diff_time[1]对应[1]的到达时间与[2]的出发时间的间隔
内容的提问来源于stack exchange,提问作者Adin Ramdhan
相关产品推荐
相关产品推荐

