2017-06-13 12 views
0

収集時間に使用される時間のリストが必要です。ユーザーは、コレクションの開始、終了、およびこれらの時間間隔を選択します。PHPの範囲

私が設定している場合:

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

を私ならばそれは正しく、問題の今

11:00, 11:30, 12:00, ... 19.00, 19.30, 20.00例えば...との間に30分間隔で午前11時から午後8時00分にリストを生成します設定:

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

それは生産以下のリストは、時間は、後方に行く午前3時まで午後8時から下がり続けている、それが上がっていくべきであるとき! 20:00, 19:30, 19:00, ... 04.00, 03.30, 03.00

どのように私は自分のコードが常に上がるように適応することができますか?それは20:00, 20:30, 21:00, ... 02.00, 02.30, 03.00

がHERESに私のコード...代わりに、これらの結果を生成します。私は、コードは自明だと思う

 $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; 
}