PHP - 以15分钟的时间间隔填充选择选项

时间:2013-12-12 14:22:25

标签: php html date

您好我正在为餐厅送货服务创建一个网站。基本上,当顾客退房时,他/她可以选择何时需要食品。我希望选择框包含15分钟的时间间隔,范围从当前时间到关闭时间。餐厅的营业时间为11:00至23:00。我想要的第一个选项是“尽快”,然后下一个选项是一小时后(四舍五入到最接近的15分钟),然后每次15分钟。所以基本上是这样的:

(Suppose current time is 13:55)

As soon as possible
15:00
15:15
15:30
15:45
...and so on until close time (23:00)

如果餐厅关闭(23:00之后),那么我只想让选择框中有一个选项显示“已关闭”。

这是我到目前为止所尝试的但是它无效:

<select>
<?php
$timenow = date("H:i");

if($timenow >"23:00" || $timenow < "11:00"){
echo '<option value="Closed">CLOSED</option>';
echo "</select>"; 
} 
else{
$deliverytime = date("H:i", strtotime('+15 minutes', $timenow));
echo '<option value="asap">As soon as possible</option>';
while($deliverytime < "23:00" && $deliverytime > "11:00"){
echo '<option value="'. $deliverytime.'">' . $deliverytime . '</option>';
$deliverytime = date("H:i", strtotime('+15 minutes', $deliverytime));
}
echo "</select>"; 
}
?>

2 个答案:

答案 0 :(得分:1)

我无法提供完整的解决方案,但可以为您指明正确的方向。

此代码将为您处理15分钟的间隔部分:

$start    = new DateTime();
$end      = new DateTime('11PM');
$interval = new DateInterval('PT15M');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt)
{
    echo $dt->format("l Y-m-d") . PHP_EOL;
}

此Stack Overflow问题中接受的答案显示了如何到达最近的15分钟间隔:PHP DateTime round up to nearest 10 minutes

结合这两者,你应该有一个完整的问题解决方案。

答案 1 :(得分:1)

strtotime('+15 minutes', $timenow)不正确。第二个参数应该是时间戳,而不是字符串。你想要strtotime('+15 minutes', time())之类的东西,或者只留下第二个参数(当前时间是默认值)。

更好的方法是始终使用时间戳,直到输出为止。这使得四舍五入和比较变得更加容易。

<select>
<?php
$timenow = time();
$opentime = strtotime('11:00');
$closetime = strtotime('23:00');

if($timenow > $closetime || $timenow <= $opentime){
    echo '<option value="Closed">CLOSED</option>';
    echo "</select>"; 
} 
else{
    // you said you wanted the time to start in 1 hour, but had +15 minutes...
    $deliverytime = strtotime('+1 hour', $timenow);
    // round to next 15 minutes (15 * 60 seconds)
    $deliverytime = ceil($deliverytime / (15*60)) * (15*60);
    echo '<option value="asap">As soon as possible</option>';
    while($deliverytime <= $closetime && $deliverytime >= $opentime) {
        echo '<option value="'. date('H:i', $deliverytime) .'">' . date('H:i', $deliverytime) . '</option>'."\n";
        $deliverytime = strtotime('+15 minutes', $deliverytime);
    }
    echo "</select>"; 
}