Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让PHP循环完成两组开始时间,但跳过中间的结束时间?_Php - Fatal编程技术网

如何让PHP循环完成两组开始时间,但跳过中间的结束时间?

如何让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

让我尽量简单地解释一下

我有两套开放时间-上午和下午。我想每隔15分钟显示一次下拉列表值,但中间关闭的时间除外

我已经做了6个小时了,没法让它工作。这一定很简单,但我就是看不出来。以下是我所拥有的:

// 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语句。你能告诉我你的输出吗?它工作得很好,很有意义。非常感谢:)它工作得很好,很有意义。非常感谢:)