2017-06-13 157 views
0

我需要一個將用於收集時間的時間列表。用戶將選擇何時開始,結束以及這些時間之間的時間間隔。PHP時間範圍

如果我設置:

Start: 11:00 
End: 20:00 
Interval: 30 

它將正確,產生從11:00列表,以20:00與如11:00, 11:30, 12:00, ... 19.00, 19.30, 20.00

之間... 30個分鐘間隔現在的問題,如果我設置:

Start: 20:00 
End: 03:00 
Interval: 30 

它產生下面的列表,時代在退步,從晚上8點持續到凌晨3點,當它應該往上走! 20:00, 19:30, 19:00, ... 04.00, 03.30, 03.00

我該如何調整我的代碼,使其始終上升?所以它產生這些結果,而不是... 20:00, 20:30, 21:00, ... 02.00, 02.30, 03.00

繼承人我的代碼:

 $collectTimes = array(); 
     $range = range(strtotime($settingsCTS), strtotime($settingsCTE), $settingsCTI * 60); 
     foreach ($range as $time) { 
      $collectTimes[] = date("H:i", $time); 
     } 
+0

也許在'strtotime($ settingsCTE)'我需要做一些事情,如$ settingsCTE> 00:00然後+1天? – Sickaaron

回答

1
$startTime = strtotime('20:00'); 
$endTime = strtotime('03:00'); 
$interval = 30; 

if ($endTime < $startTime) { 
    $endTime += 60 * 60 * 24; 
} 

$collectTimes = array(); 
$range = range($startTime, $endTime, $interval * 60); 
foreach ($range as $time) { 
    $collectTimes[] = date("H:i", $time); 
} 
2

我認爲的代碼是不言自明的,我真的沒有什麼聰明的說一下吧:)

$start = "20:00"; 
$end = "03:00"; 
$interval = 30; 
$temp = null; 
$intervals = [date("H:i",strtotime($start))]; 

while ($temp !== date("H:i",strtotime($end))) { 
    $temp = date("H:i",strtotime($start." + $interval minutes")); 
    array_push($intervals,$temp); 
    $interval += 30; 
}