如何计算PHP数组中相邻行程的到达与出发时间差?
解决PHP计算相邻航班时间间隔的问题
我来帮你修正代码!你当前的逻辑是在计算每个航班自身的出发与到达时间差,但你实际需要的是前一个航班的到达时间和后一个航班的出发时间的间隔,所以得调整遍历的方式。
修正后的代码
假设你已经有了能计算两个时间差的timeDifference函数,我们可以这样写:
$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++) { // 获取前一个航班的到达时间,和后一个航班的出发时间 $prev_arrival = $data[$i]['arrival']; $next_depart = $data[$i+1]['depart']; // 计算时间差并存入数组 $diff_time[] = timeDifference($prev_arrival, $next_depart); } // 打印结果验证 print_r($diff_time);
关键逻辑说明
- 用
for循环而非foreach:因为我们需要明确的索引来关联当前元素和下一个元素,这样能直接拿到$i和$i+1对应的航班数据 - 循环终止条件是
count($data)-1:最后一个航班没有下一个航班,所以不需要处理它 - 每次循环配对的是前一个的到达时间和后一个的出发时间,完全匹配你要的两个计算需求
补充:如果还没实现timeDifference函数
如果你的timeDifference函数还没写,这里给一个示例实现,返回时间差的总分钟数(也可以改成格式化的字符串):
function timeDifference($time_start, $time_end) { // 把时间字符串转成DateTime对象 $dt_start = new DateTime($time_start); $dt_end = new DateTime($time_end); // 计算时间间隔 $interval = $dt_start->diff($dt_end); // 返回总分钟数(小时*60 + 分钟) return $interval->h * 60 + $interval->i; // 想要格式化字符串的话,比如"1小时40分钟",可以用: // return $interval->format('%h小时%i分钟'); }
运行上面的代码后,$diff_time会得到[100, 170],对应你要的两组时间差:
- 第一组:1小时40分钟(100分钟)
- 第二组:2小时50分钟(170分钟)
内容的提问来源于stack exchange,提问作者Adin Ramdhan
相关产品推荐
相关产品推荐

