2017-06-13 156 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; 
}