отсчет двух дат без учета времени перерыва

#php

Вопрос:

я хочу подсчитать, сколько времени прошло в работе с пропущенным временем перерыва(не засчитывается) Есть 3 смены :

  1. Утренняя смена: с 08 утра до 04 вечера (Время перерыва : с 00 вечера до 01 вечера) (время первого перерыва : с 11.30 утра до 01.30 вечера)
  2. Дневная смена: с 05 вечера до 10 вечера (Время перерыва : с 07 вечера до 08 вечера)
  3. Ночная смена: с 11 вечера до 07 утра (Время перерыва : с 02 утра до 03 утра)

Я пытаюсь сделать это с помощью этого кода : ( Примечание : Но он отлично работает только в ночную смену, в утреннюю и дневную смену это беспорядок)

 <?php

function hitung()
{
    global $waktu_awal;
    global $waktu_akhir;
    global $query;
    global $break;
    $minute = 0;
    $hajam = 0;
    $hmnt = 0;
    $j = 0;
    while ($rs = mysqli_fetch_array($query)) {
        $break = 0;
        $start = ($rs['waktu_mulai'] == NULL) ? "" : strtotime($rs['waktu_mulai']);
        $end =   ($rs['waktu_selesai'] == NULL) ? "" : strtotime($rs['waktu_selesai']);

        $tgl1 = new DateTime($rs['waktu_mulai']);
        $tgl2 = new DateTime($rs['waktu_selesai']);
        $d = $tgl2->diff($tgl1)->days;

        if ($d == 0) {
            $d = 1;
        }
        //$t1 = date_create($rs['waktu_mulai']);
        $t2 = date_create($rs['waktu_selesai']);
        $hamnt = 0;
        for ($i = 1; $i <= $d; $i  ) {

            $diff    = $end - $start; 
            $hours    = floor($diff / (3600)); 
            $minute    = $diff - $hours * (3600);
            $break_time = array(300, 359, 1199, 1299, 1899, 1999);

            if (
                (int)date_format($t2, "Hi") > (int)$break_time[0] and (int)date_format($t2, "Hi") <= (int)$break_time[1] ||
                (int)date_format($t2, "Hi") > (int)$break_time[2] and (int)date_format($t2, "Hi") <= (int)$break_time[3] ||
                (int)date_format($t2, "Hi") > (int)$break_time[4] and (int)date_format($t2, "Hi") <= (int)$break_time[5]
            ) {
                $minute = 0;
            }
       
            if ((int)date_format($t2, "Hi") > (int)$break_time[1]) $break  ; 
            if ((int)date_format($t2, "Hi") > (int)$break_time[3]) $break  ; 
            if ((int)date_format($t2, "Hi") > (int)$break_time[5]) $break  ; 
            echo $hours . ":" . floor($minute / 60) . "</br>";
            $hjam = 0;
           
            if (is_null($hjam)) {
                $hjam = $hours - $break;
                $hmnt = $minute;
            } else {
                $hjam = $hjam   $hours - $break;
                $hmnt = $hmnt   $minute;
            }
            if (is_null($hjam)) {
                $hajam = (int)$hjam;
                $hamnt = (int)$hmnt;
            } else {
                $hajam = (int)$hajam   (int)$hjam;
                $hamnt = (int)$hamnt   (int)$hmnt;
            }

            echo  "Total : ". $break ;
            echo (int)$hours - $break . ':' . floor($minute / 60) . "</br>";
            $break = 0;
        }
        if (floor($hamnt / 60) < 60) {
            $j = 0;
        }
    }
}
?>