2016-09-21 2 views
1

가능한 한 쉽게이 문제를 설명하겠습니다.PHP는 2 회의 오픈 타임을 반복하지만 그 사이의 클로즈 타임을 건너 뛰게하려면 어떻게해야합니까?

오전과 오후의 두 세트가 있습니다. 그 사이에 닫힌 시간을 제외하고 매 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:00에서 13:00 사이)을 건너 뛰기 위해 다음과 같이 변경해 보았습니다.

while($deliverytime <= $close_am && $deliverytime >= $open_am && (
$deliverytime <= $close_pm && $deliverytime >= $open_pm 
)) { 

하지만 작동하지 않았습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 난 그냥 볼 수 없습니다 :(

+0

먼저 7 행에는 선언되지 않은 변수가 있습니다 : $ time_now 대신 $ timenow가 필요합니다. for 루프를 대신 사용해 보셨습니까? For ($ I = 0; $ I <= $ close_am; $ i ++) {if ($ deliverytime> = $ open_am) {// docode}}? – Juan

+0

@Juan 죄송합니다. 코드를 복사 할 때 오타가되었습니다. 이제 루프를 시도 할 것입니다 .. – user1996496

+0

for 루프를 사용해 보시고 더 잘 작동 할 수있는 if 문을 포함 시키십시오. 당신은 나에게 당신의 결과를 말할 수 있습니까 ?? – Juan

답변

1

좋아 귀하의 질문에 대한 깊이를 더 깊이 들여다 보면 다음과 같이 생각합니다.

// 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>"; 

제대로 작동하는 것 같습니다. 내가 잘못한 것을 명확히하고 필요에 따라 수정할 것입니다 (for 루프를 사용하려고했지만 이상하게 보입니다)

+0

완벽하게 작동하고 의미가 있습니다. 정말 고맙습니다 :) – user1996496

-1

가 왜 그냥 두 개의 루프가 또는

while(... open AM stuff ...) { ... } 
while(... open PM stuff ...) { ... } 

, 한 루프의 lunchbreak을 통해 건너 루프 제어를 사용하여 :

while($open_am -> $closed_pm) { 
    if (lunchtime) { 
     continue; 
    } 
    ... output 
} 
관련 문제