Halo! Saya seorang pemula dalam pemrograman dan jika ada yang dapat membantu saya mengubah cuplikan kode saya akan sangat menghargainya. Saya memiliki sistem penjadwalan dengan slot waktu, di mana slot dihasilkan dari variabel dengan tanggal mulai hingga tanggal akhir. Saya ingin menambahkan periode antara awal dan akhir waktu, di mana tidak ada yang bisa dijadwalkan, misalnya, dari pukul 12:00 hingga 13:00, namun, saya tidak tahu bagaimana melakukannya. Ikuti kode di bawah ini:

$duration = 15;
$cleanup = 0;
$start = "08:00";
$end = "18:00";

function timeslots($duration, $cleanup, $start, $end){
    $start = new DateTime($start);
    $end = new DateTime($end);
    $interval = new DateInterval("PT".$duration."M");
    $cleanupInterval = new DateInterval("PT".$cleanup."M");
    $slots = array();
    
    for($intStart = $start; $intStart<$end; $intStart->add($interval)->add($cleanupInterval)){
        $endPeriod = clone $intStart;
        $endPeriod->add($interval);
        if($endPeriod>$end){
            break;
        }
        
        $slots[] = $intStart->format("H:iA")." - ". $endPeriod->format("H:iA");
        
    }
    
    return $slots;
}
php
1
Robson 5 April 2021, 02:14

2 jawaban

Jawaban Terbaik

Inisialisasi break-time Anda mulai dan end Sama seperti periode. Periksa apakah periode Anda mulai / end adalah antara break-time . Kemudian beri tahu periode start-time untuk memulai dari break-end.

LARUTAN

$duration = 15;
$cleanup = 0;
$start = "08:00";
$end = "18:00";

// add breakStart and breakEnd times
$breakStart = "12:00";
$breakEnd = "13:00";

function timeslots($duration, $cleanup, $start, $end){
    $start = new DateTime($start);
    $end = new DateTime($end);

    $breakStart = new DateTime($breakStart);
    $breakEnd = new DateTime($breakEnd);

    $interval = new DateInterval("PT".$duration."M");
    $cleanupInterval = new DateInterval("PT".$cleanup."M");
    $slots = array();
    
    for($intStart = $start; $intStart<$end; $intStart->add($interval)->add($cleanupInterval)){

        $endPeriod = clone $intStart;
        $endPeriod->add($interval);

        if($endPeriod > $breakStart && $endPeriod < $breakEnd){
            // this block when $endPeriod is between break-time
            $intStart = $breakEnd; //so make the starting period time to start after break
            $endPeriod->add($interval);
        } elseif($intStart > $breakStart  && $endPeriod < $breakEnd){
            // this block when both $intStart and $endPeriod is between break-time
            $intStart = $breakEnd; //so make the starting period time to start after break
            $endPeriod->add($interval);
        } elseif($intStart > $breakStart  && $endPeriod > $breakEnd){
            // this block when $intStart is between break-time
            $intStart = $breakEnd; //so make the starting period time to start after break
            $endPeriod->add($interval);
        } else{
            // your logic for creating the slots
            if($endPeriod>$end){
                break;
            }
            $slots[] = $intStart->format("H:iA")." - ". $endPeriod->format("H:iA");
        }

    }
    
    return $slots;
}
0
Psycho 5 April 2021, 20:26

Anda dapat merujuk ke ini https://www.codexworld.com/Create- Time-range-array-php / Di mana Anda dapat memiliki array dan Anda mendapatkan indeks untuk waktu awal dan akhir Anda dan kemudian Anda dapat menghindari semua indeks antara start_index dan end_index.

0
Adi 5 April 2021, 01:45