如何在foreach循环中创建数组累加日期差的总分钟数?
解决方法
首先修正代码里的变量名不一致问题,然后实现分钟数的收集与求和:
步骤1:修正变量名错误
你的代码存在多处变量名拼写/引用错误,比如:
$horaras_profissional是查询结果,但foreach遍历的是未定义的$professional_hours- 循环内用
$row_professional_time引用,但循环变量是$row_professional_hours $data_final、$data_inicio_convert都是未定义变量,应对应$final_date、$start_date_convert
步骤2:实现分钟数收集与求和
提供两种实现方式,按需选择:
方式一:直接累加总和(无需保存单个分钟数,更高效)
// 初始化总分钟数为0 $total_minutes = 0; // 遍历正确的查询结果变量 foreach ($horaras_profissional as $row_professional_hours) { $start_date = $row_professional_hours['1']; $final_date = $row_professional_hours['2']; $start_date_convert = strtotime($start_date); $final_date_convert = strtotime($final_date); // 计算时间差(单位:秒) $difference = $final_date_convert - $start_date_convert; $hours = intval($difference / 3600); $minutes = doubleval(($difference % 3600) / 60); $seconds = doubleval($difference % 60); $consumed_time = $hours . ":" . $minutes . ":" . $seconds; // 累加当前分钟数到总和 $total_minutes += $minutes; echo $minutes . "<br>"; } // 输出总分钟数 echo "总分钟数:" . $total_minutes;
方式二:存入数组再求和(需要保留每个分钟数的场景)
// 初始化存储分钟数的数组 $minutes_array = []; foreach ($horaras_profissional as $row_professional_hours) { $start_date = $row_professional_hours['1']; $final_date = $row_professional_hours['2']; $start_date_convert = strtotime($start_date); $final_date_convert = strtotime($final_date); $difference = $final_date_convert - $start_date_convert; $hours = intval($difference / 3600); $minutes = doubleval(($difference % 3600) / 60); $seconds = doubleval($difference % 60); $consumed_time = $hours . ":" . $minutes . ":" . $seconds; // 将当前分钟数加入数组 $minutes_array[] = $minutes; echo $minutes . "<br>"; } // 计算数组内所有分钟数的总和 $total_minutes = array_sum($minutes_array); // 输出总分钟数 echo "总分钟数:" . $total_minutes;
额外建议
- 数据库字段尽量使用有意义的名称(比如
start_time、end_time),而非索引['1']、['2'],提升代码可读性,减少出错概率。 - 如果日期格式无法被
strtotime识别,推荐用DateTime类处理,兼容性更强:
$start_date_obj = new DateTime($start_date); $final_date_obj = new DateTime($final_date); $interval = $start_date_obj->diff($final_date_obj); // 直接计算总分钟数:小时转分钟 + 分钟 + 秒转分钟 $total_minutes = $interval->h * 60 + $interval->i + $interval->s / 60;
内容的提问来源于stack exchange,提问作者Luan Eduardo Moi
相关产品推荐
相关产品推荐

