You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP数组中计算多组Intime与Outtime的总时长?

PHP计算多组入出时间总时长的实现方案

嗨,我来帮你搞定这个时间计算的需求!咱们一步步来拆解问题,最终实现总时长的计算:

第一步:拆分入站和出站时间数组

首先得把原数组里的入时间(-i结尾)和出时间(-o结尾)分开,这样才能一一对应计算每组的时长。我们可以用array_filter结合字符串匹配来筛选,之后重置索引确保两组数组的索引是对应的:

$originalArray = [
    '07:50:15-i',
    '10:55:41-i',
    '12:33:30-i',
    '12:34:04-i',
    '14:32:57-i',
    '14:32:59-i',
    '10:29:27-o',
    '12:06:16-o',
    '14:29:10-o',
    '14:29:12-o',
    '15:02:28-o',
    '16:57:31-o'
];

// 筛选所有入时间并重置索引
$inTimes = array_values(array_filter($originalArray, function($item) {
    return strpos($item, '-i') !== false;
}));

// 筛选所有出时间并重置索引
$outTimes = array_values(array_filter($originalArray, function($item) {
    return strpos($item, '-o') !== false;
}));

第二步:计算每组时长并累加总时长

接下来我们遍历每组对应的入出时间,先去掉后缀得到纯时间字符串,然后用DateTime类来处理时间差计算,最后把每组的时长(秒数)累加到总时长里:

$totalSeconds = 0;

// 遍历每组时间(这里默认入、出时间的数量是一一对应的)
foreach ($inTimes as $index => $inTimeStr) {
    // 移除时间字符串的后缀
    $cleanIn = str_replace('-i', '', $inTimeStr);
    $cleanOut = str_replace('-o', '', $outTimes[$index]);
    
    // 转换为DateTime对象
    $inDateTime = DateTime::createFromFormat('H:i:s', $cleanIn);
    $outDateTime = DateTime::createFromFormat('H:i:s', $cleanOut);
    
    // 计算时间差并转换为秒数
    $interval = $outDateTime->diff($inDateTime);
    $groupSeconds = $interval->h * 3600 + $interval->i * 60 + $interval->s;
    
    // 累加到总时长
    $totalSeconds += $groupSeconds;
}

第三步:将总秒数转换为易读的时间格式

最后把总秒数转换成HH:MM:SS的格式,方便查看:

// 计算小时、分钟、秒
$hours = floor($totalSeconds / 3600);
$remaining = $totalSeconds % 3600;
$minutes = floor($remaining / 60);
$seconds = $remaining % 60;

// 格式化输出,确保两位数
$totalDuration = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);

echo "总时长:{$totalDuration}";

注意事项

  • 要确保入时间和出时间的数量是一一对应的,否则会出现索引不存在的错误;
  • 这个方案适用于同一天内的时间计算,如果存在跨天的情况,需要在时间字符串中补充日期信息再进行计算。

内容的提问来源于stack exchange,提问作者KMKMAHESH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:46:36