如何让PHP循环完成两组开始时间,但跳过中间的结束时间?
让我尽量简单地解释一下 我有两套开放时间-上午和下午。我想每隔15分钟显示一次下拉列表值,但中间关闭的时间除外 我已经做了6个小时了,没法让它工作。这一定很简单,但我就是看不出来。以下是我所拥有的:如何让PHP循环完成两组开始时间,但跳过中间的结束时间?,php,Php,让我尽量简单地解释一下 我有两套开放时间-上午和下午。我想每隔15分钟显示一次下拉列表值,但中间关闭的时间除外 我已经做了6个小时了,没法让它工作。这一定很简单,但我就是看不出来。以下是我所拥有的: // Fake the time to 11:31 $timenow = strtotime('11:31'); echo '<select name="delivery_time">'; // Start with 1 hour after current time. $deliv
// Fake the time to 11:31
$timenow = strtotime('11:31');
echo '<select name="delivery_time">';
// Start with 1 hour after current time.
$deliverytime = strtotime('+1 hour', $timenow);
// Round to next 15 minutes
$deliverytime = ceil($deliverytime / (15*60)) * (15*60);
$open_am = strtotime('07:00');
$close_am = strtotime('11:00');
$open_pm = strtotime('13:00');
$close_pm = strtotime('20:00');
while($deliverytime <= $close_am && $deliverytime >= $open_am) {
echo '<option value="'. date('H:i', $deliverytime) .'">' . date('H:i', $deliverytime) . '</option>'."\n";
$deliverytime = strtotime('+15 minutes', $deliverytime);
}
echo "</select>";
//将时间设为11:31
$timenow=strotime('11:31');
回声';
//从当前时间后1小时开始。
$deliverytime=strottime(“+1小时”,$timenow);
//轮到下一轮15分钟
$deliverytime=ceil($deliverytime/(15*60))*(15*60);
$open_am=strottime('07:00');
$close_am=strottime('11:00');
$open_pm=strottime('13:00');
$close_pm=strottime('20:00');
而($deliverytime=$open\u am){
回显“”。日期('H:i',$deliverytime)。“”\n;
$deliverytime=strottime(“+15分钟,$deliverytime”);
}
回声“;
这就是它变得棘手的地方。为了跳过关闭的时间(11:00到13:00之间),我尝试将其更改为:
while($deliverytime <= $close_am && $deliverytime >= $open_am && (
$deliverytime <= $close_pm && $deliverytime >= $open_pm
)) {
while($deliverytime=$open\u am&&(
$deliverytime=$open\u pm
)) {
但那不起作用。我做错了什么?我就是看不出来:(为什么不只做两个循环
while(... open AM stuff ...) { ... }
while(... open PM stuff ...) { ... }
或者,只需一个循环,使用循环控制跳过午休时间:
while($open_am -> $closed_pm) {
if (lunchtime) {
continue;
}
... output
}
为什么不只做两个循环呢
while(... open AM stuff ...) { ... }
while(... open PM stuff ...) { ... }
或者,只需一个循环,使用循环控制跳过午休时间:
while($open_am -> $closed_pm) {
if (lunchtime) {
continue;
}
... output
}
好吧,在更深入地看了你的问题之后,我认为你正在尝试这样做:
// Started at 0 'cause I felt it more logical (i.e. I'm just lazy)
$time_now = strtotime('00:00');
// Consolidated because I hate seeing the same $variable twice, sorry
$deliverytime = ceil( strtotime('+1 hour', $time_now) / (15*60)) * (15*60);
$open_am = strtotime('07:00');
$close_am = strtotime('11:00');
$open_pm = strtotime('13:00');
$close_pm = strtotime('20:00');
echo '<select name="delivery_time">';
// Started with a general comparison so the loop knows its range of loop
while ( $deliverytime <= $close_pm ) {
if ( $deliverytime < $open_am ) {
echo '';
}
else if ( $deliverytime >= $close_am && $deliverytime <= $open_pm ) {
echo '';
} else {
echo '<option value="'. date('H:i', $deliverytime) .'">' . date('H:i', $deliverytime) . '</option>'."\n";
}
$deliverytime = strtotime('+15 minutes', $deliverytime);
}
echo "</select>";
//从0开始,因为我觉得它更符合逻辑(即,我只是懒惰)
$time_now=strottime('00:00');
//合并是因为我讨厌看到相同的$variable两次,抱歉
$deliverytime=ceil(标准时间('+1小时',$time_now)/(15*60))*(15*60);
$open_am=strottime('07:00');
$close_am=strottime('11:00');
$open_pm=strottime('13:00');
$close_pm=strottime('20:00');
回声';
//从一般比较开始,以便循环知道其循环范围
虽然($deliverytime=$close\u am&&$deliverytime在更深入地研究您的问题之后,我认为您正在尝试这样做:
// Started at 0 'cause I felt it more logical (i.e. I'm just lazy)
$time_now = strtotime('00:00');
// Consolidated because I hate seeing the same $variable twice, sorry
$deliverytime = ceil( strtotime('+1 hour', $time_now) / (15*60)) * (15*60);
$open_am = strtotime('07:00');
$close_am = strtotime('11:00');
$open_pm = strtotime('13:00');
$close_pm = strtotime('20:00');
echo '<select name="delivery_time">';
// Started with a general comparison so the loop knows its range of loop
while ( $deliverytime <= $close_pm ) {
if ( $deliverytime < $open_am ) {
echo '';
}
else if ( $deliverytime >= $close_am && $deliverytime <= $open_pm ) {
echo '';
} else {
echo '<option value="'. date('H:i', $deliverytime) .'">' . date('H:i', $deliverytime) . '</option>'."\n";
}
$deliverytime = strtotime('+15 minutes', $deliverytime);
}
echo "</select>";
//从0开始,因为我觉得它更符合逻辑(即,我只是懒惰)
$time_now=strottime('00:00');
//合并是因为我讨厌看到相同的$variable两次,抱歉
$deliverytime=ceil(标准时间('+1小时',$time_now)/(15*60))*(15*60);
$open_am=strottime('07:00');
$close_am=strottime('11:00');
$open_pm=strottime('13:00');
$close_pm=strottime('20:00');
回声';
//从一般比较开始,以便循环知道其循环范围
虽然($deliverytime=$close\u am&&$deliverytime First,我想说第7行有一个未声明的变量:$timenow而不是$time\u now。您尝试过for循环吗?for($I=0;$I=$open\u am){//docode}?@Juan抱歉,我在复制代码时输入了一个错误。现在将尝试循环..你可以尝试for循环,并包含一个可能更好的if语句。你能告诉我你的输出吗?首先我想说第7行有一个未声明的变量:$timenow而不是$time\u now。你尝试过for循环吗?for($I=0;$I=$open\u am){//docode}?@Juan抱歉,我在复制代码时输入了一个错误。我现在将尝试循环..你很好尝试for循环,并包含一个可能更好的if语句。你能告诉我你的输出吗?它工作得很好,很有意义。非常感谢:)它工作得很好,很有意义。非常感谢:)