【发布时间】:2019-06-06 07:47:18
【问题描述】:
我昨天在将日期时间间隔相加时提出了一个问题,并被指向此线程 - How we can add two date intervals in PHP
这很棒而且很有意义。但是,当我尝试在 foreach 循环中执行提交的答案时,我得到的结果不正确。
这是我制作的一个函数,它可以获取所有员工的上班时间和下班时间,它们存储在数据库中并使用 PHP 的日期(H:i:s)创建。
我的功能获取任何给定员工的所有进出时间,我正在使用的报告功能需要显示他们工作的总小时数。
我试图通过将时间转换为 datetime 对象并使用 ->diff 来获取间隔并因此计算该天的小时数来实现这一点,然后我尝试使用 foreach 循环将间隔添加在一起,从而给我一个任何给定日期范围内的总工作时间。
整个函数加起来是这样的:
function getTotalHours($staff_id,$from_date,$to_date){
$sql = "SELECT * FROM oc_staff_times WHERE date BETWEEN '$from_date' AND '$to_date' AND staff_id = '$staff_id'";
$result = $this->conn->query($sql);
if ($result->num_rows > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$data[] = $row;
}
$base_time = new DateTime('00:00');
$total = new DateTime('00:00');
foreach ($data as $time) {
$in = new DateTime($time['clock_in_time']);
$out = new DateTime($time['clock_out_time']);
$interval = $in->diff($out);
$base_time->add($interval);
}
return $total->diff($base_time)->format("%H:%I");
}
}
我希望得到每月的总数,但我的最终结果似乎只有一天的总数。这是 UI 的屏幕截图(总小时数被粗略圈起来)这也显示了我的函数应该添加在一起的时间戳。
【问题讨论】:
-
不知道你要达到什么目的,但显然
while()和foreach()不是同时需要的,你只能使用while():- 3v4l.org/RfTmY