2017-06-21 46 views
1

我一直在辯論是否使用日期函數,或者是否有一個更清晰的方法來創建一個給定的一天的分鐘數組,我的代碼是這樣讀的;正確的方式來制定一個時間表

function emptySchedule() 
    { 
     $emptySchedule = []; 
     for ($h = 0; $h < 24; ++$h) { 
      for ($m = 0; $m < 60; ++$m) { 
       $emptySchedule[str_pad($h, 2, '0', STR_PAD_LEFT).':'.str_pad($m, 2, '0', STR_PAD_LEFT)] = []; 
      } 
     } 

     return $emptySchedule; 
    } 

但它只是感覺,有沒有更好的方法來達到同樣的效果,或者一個更好的方式與約會對象來處理在當天幾分鐘甚至更好的全球公認的正確辦法?我不想使用一個軟件包,但如果有一個很好的軟件包,我可以使用它。

編輯;在某些情況下,我會將數組放入當天的每一分鐘。

EDIT2:爲了這將用於什麼沒有任何輸入的需要,我的最終功能是;

public function emptySchedule() 
{ 
    $startDate = date_create("today"); //Any start date works 
    $endDate = date_create("tomorrow"); //Any end date works 
    $step = new \DateInterval("PT1M"); //1 minute, can change 
    $date = $startDate; 
    $times = []; 
    while ($date <= $endDate) { 
     $times[$date->format("H:i")] = []; 
     $date = $date->add($step); 
    } 

    return $times; 
} 
+1

並非所有的日子在24小時...!僅僅因爲這個原因,你應該使用日期函數。 – deceze

+0

夏令時沒有發生在我身上,我完全喪失瞭解決這個問題的方式,可能需要一個清新的早晨喝咖啡,我正在工作的最後一個小時,非常疲憊! ! –

+0

Robert,請向我們展示一個理想的輸出示例以幫助解決問題。 – calexandre

回答

1

好了,你的代碼更優雅的做法是:

<?php 
function emptySchedule($hoursInit = date('G'), $hoursActive = 24) 
    { 
     $emptySchedule = []; 
     for ($h = $hoursInit; $h < $hoursActive; ++$h) { 
      for ($m = 0; $m < 60; ++$m) { 
      $emptySchedule[sprintf('%02d:%02d', $h, $m)] = []; 
      } 
     } 

     return $emptySchedule; 
} 

您可以使用間隔過,在你的日程安排午餐和東西合作:

<?php 
function emptySchedule($hoursInit = date('G'), $hoursActive = 24, $interval = false) 
    { 
     $emptySchedule = []; 
     for ($h = $hoursInit; $h < $hoursActive; ++$h) { 
      if ($interval && ($h < $interval['start'] || $h > $interval['end'])) { 
       for ($m = 0; $m < 60; ++$m) { 
       $emptySchedule[sprintf('%02d:%02d', $h, $m)] = []; 
       } 
      } 

     } 

     return $emptySchedule; 
} 

但是,就像@deceze所說的那樣,使用日期函數是必須的,現在做起來並不簡單,我會試着找出更好的方法;

+1

我認爲您的答案和下面的答案的組合可能是「乾淨」的做法我在找,恥辱我不能接受2答案:(! –

相關問題