我目前正在摆弄这个我修改为的PHP代码:
$begin = new DateTime('2010-01-01 08:00');
$end = new DateTime( '2010-05-01 20:00');
$interval = DateInterval::createFromDateString('15 min');
$period = new DatePeriod($begin, $interval, $end);
foreach ( $period as $dt ) {
echo $dt->format( "Y-d-m H:i" ) . '<br/>';
}
这回声:
2010-01-01 08:00
2010-01-01 08:15
2010-01-01 08:30
2010-01-01 08:45
2010-01-01 09:00
.....
2010-01-05 01:00
2010-01-05 01:15
2010-01-05 01:30
.....
2010-01-05 19:15
2010-01-05 19:30
2010-01-05 19:45
在上面的代码中我只希望将时间放在上午8点到晚上8点之间。在晚上8点到8点之间的任何时间都不会显示shouddn。我基本上知道我做错了什么,即显示日期范围,但我想知道如何解决它。
答案 0 :(得分:0)
如果由于某些原因确实需要显示确切的变量而不进行过滤,则可以使用2 DatePeriod:
<?php
$begin = new DateTime('2010-01-01 08:00');
$end = new DateTime( '2010-05-01 20:00');
$interval = new DateInterval('P1D');
$period = new DatePeriod($begin, $interval, $end);
foreach ( $period as $dt ) {
$tempBegin = $dt;
$tempEnd = clone $dt;
$tempEnd->add(new DateInterval('PT12H1M')); //remove '1M' if you just need value 08.00 - 19.45
if($tempEnd > $end)
$tempEnd = $end;
$tempInterval = new DateInterval('PT15M');
$tempPeriod = new DatePeriod($tempBegin, $tempInterval, $tempEnd);
foreach ( $tempPeriod as $temp ) {
echo $temp->format( "Y-d-m H:i" ) . '<br/>';
}
}
如果您只是需要显示或分配值,@ scrowler答案就是您所需要的。
答案 1 :(得分:-1)
您可以在最长时间和最短时间内进行字符串比较:
foreach ($period as $dt) {
$hour_and_min = $dt->format('H:i');
if($hour_and_min >= '08:00' && $hour_and_min <= '20:00') {
echo $dt->format( "Y-d-m H:i" ) . '<br/>' . PHP_EOL;
}
}
编辑:您的“早上8点到晚上8点”和“晚上8点到早上8点”之间的条件有点含糊不清,无论您是否在其中任何一个语句中包括上午8点和晚上8点...通过将低于或等于和大于或等于运营商改为LT或GT来适应:$hour_and_min > '08:00' && $hour_and_min < '20:00'