Я вчера задал вопрос по суммированию интервалов даты и времени, и мне указали на эту ветку - Как мы можем добавить два интервала дат в 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");
}
}
Я надеялся получить месячную сумму, но мне кажется, что мой итоговый результат составляет всего лишь один день?Вот снимок экрана пользовательского интерфейса (общее количество часов грубо обведено), здесь также показаны метки времени, которые моя функция должна складывать вместе.
