您好我正在为餐厅送货服务创建一个网站。基本上,当顾客退房时,他/她可以选择何时需要食品。我希望选择框包含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>";
}
?>
答案 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>";
}