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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:05:23