У меня есть массив, который содержит дни и входы/выходы работодателей в течение дня. Обычно это всего 4 строки в день. (In -> Out (lunch) -> In -> Out)
Рассчитать общее количество отработанных часов
Я хотел бы, чтобы все часы работали в соответствии с вводом/выводом и показывали их работодателю.
Так что мой массив дней структурирован таким образом:
Day '2016-07-01' -> Events (4) -> (0) => ('in', '09:00')
(1) => ('out', '13:00')
(2) => ('in', '14:00')
(3) => ('out', '17:00')
и так далее ..
К примеру выше приведенный ниже код печатает 6.90
, который является неправильным, правильный результат должен быть 8 ч.
$total_minutes = 0;
$total_hours = 0;
foreach($listOfDays as $day)
{
foreach($day->events as $key => $event)
{
// It's always 'in'
if(($key % 2 == 0) || $key == 0)
{
$hour_in = new DateTime($event->hour);
$hour_out = null;
if(isset($day->events[$key + 1]->hour))
$hour_out = new DateTime($day->events[$key + 1]->hour);
if($hour_out != null)
{
$total_hours += $hour_out->diff($hour_in)->format('%H');
$total_minutes += $hour_out->diff($hour_in)->format('%i');
}
}
// It's always 'out'
else
{
$hour_in = new DateTime($day->events[$key - 1]->hour);
$hour_out = new DateTime($event->hour);
$total_hours += $hour_out->diff($hour_in)->format('%H');
$total_minutes += $hour_out->diff($hour_in)->format('%i');
}
}
}
$total_hours_worked = $total_hours . '.' . $total_minutes;
print_r($total_hours_worked);