如何计算多员工单日总工作时长与总薪酬?
实现多员工单日总工作时长与总薪酬计算
方法一:直接通过SQL计算(推荐)
利用数据库日期函数直接计算总时长和总薪酬,效率更高,减少PHP端计算压力:
SELECT SUM(TIMESTAMPDIFF(MINUTE, timeIn, timeOut)) AS total_minutes, -- 假设时薪为 $11.48(由总薪酬34.44/总时长3得出,可根据实际规则调整) ROUND(SUM(TIMESTAMPDIFF(MINUTE, timeIn, timeOut)) / 60 * 11.48, 2) AS total_salary FROM worker_table;
对应PHP调用代码:
$result = mysqli_query($conn, "SELECT SUM(TIMESTAMPDIFF(MINUTE, timeIn, timeOut)) AS total_minutes, ROUND(SUM(TIMESTAMPDIFF(MINUTE, timeIn, timeOut))/60*11.48,2) AS total_salary FROM worker_table"); $row = mysqli_fetch_assoc($result); // 转换总分钟为小时格式 $total_hours = intdiv($row['total_minutes'], 60) . ':' . ($row['total_minutes'] % 60); $total_salary = '$' . $row['total_salary']; echo "总工作时长:{$total_hours}<br>"; echo "总薪酬:{$total_salary}";
方法二:在PHP循环中累加计算
基于你现有代码修改,通过循环累加单条记录时长,最终计算总时长和薪酬:
$total_diff_minutes = 0; $hourly_rate = 11.48; // 时薪,根据实际规则调整 $result = mysqli_query($conn, "SELECT * FROM worker_table "); while ($row = mysqli_fetch_array($result)) { $from_time = strtotime($row['timeIn']); $to_time = strtotime($row['timeOut']); $diff_minutes = round(abs($from_time - $to_time) / 60, 2); $total_diff_minutes += $diff_minutes; // 保留单条记录时长输出(如果需要) $hours = intdiv($diff_minutes, 60) . ':' . ($diff_minutes % 60); echo $hours . "<br><br>"; } // 计算总工作时长格式 $total_hours = intdiv($total_diff_minutes, 60) . ':' . (round($total_diff_minutes % 60)); // 计算总薪酬 $total_salary = '$' . round($total_diff_minutes / 60 * $hourly_rate, 2); echo "<hr>"; echo "总工作时长:{$total_hours}<br>"; echo "总薪酬:{$total_salary}";
注意事项
- 确保
timeIn和timeOut字段为MySQL可识别的日期时间格式(如YYYY-MM-DD HH:MM:SS),否则日期解析函数会失效。 - 时薪需根据实际薪酬规则调整,若有加班费率、固定日薪等特殊规则,需修改对应计算逻辑。
内容的提问来源于stack exchange,提问作者Samson M
相关产品推荐
相关产品推荐

