2017-07-20 55 views
1

我需要在30個分鐘爲增量來寫的時間選擇,如:日期選擇用30個分鐘爲增量

<option value="10:00">10:00 am</option> 
<option value="10:30">10:30 am</option> 
<option value="11:00">11:00 am</option> 
<option value="11:30">11:30 am</option> 
<option value="12:00">12:00 pm</option> 
<option value="12:30">12:30 pm</option> 
<option value="13:00">1:00 pm</option> 
<option value="13:30">1:30 pm</option> 
... 
<option value="23:00">11:00 pm</option> 
<option value="23:30">11:30 pm</option> 

一種方式做到這一點是通過使用密鑰把這個陣列中的全部和環=>值對。不過,我寧願將它作爲一個php循環。

所以,我發現以下有趣的功能:

for($hours=0; $hours<24; $hours++) // the interval for hours is '1' 
    for($mins=0; $mins<60; $mins+=30) // the interval for mins is '30' 
     echo '<option>'.str_pad($hours,2,'0',STR_PAD_LEFT).':' 
         .str_pad($mins,2,'0',STR_PAD_LEFT).'</option>'; 

這讓我接近。要修改它來滿足我的需求,我改組這樣幾件事情:

echo '<select>'; 
    for($hours=3; $hours<24; $hours++) // the interval for hours is '1' 
    for($mins=0; $mins<60; $mins+=30) // the interval for mins is '30' 

     $thrs = str_pad($hours,2,'0',STR_PAD_LEFT); 
     $tmin = str_pad($mins,2,'0',STR_PAD_LEFT); 
     $tstr = $thrs.':'.$tmin; 

     echo ' 
     <option value="'.$tstr.'"> 
       '.$tstr.' '.($thrs > 11 ? 'pm' : 'am').' 
     </option>'; 

echo '</select>'; 

然而,東西壞了,我得到一個值:23:60 PM

我缺少什麼?

回答

0

你需要將你的循環放在括號中。

echo '<select>'; 
for($hours=3; $hours<24; $hours++) { // the interval for hours is '1' 
    for($mins=0; $mins<60; $mins+=30) { // the interval for mins is '30' 

     $thrs = str_pad($hours,2,'0',STR_PAD_LEFT); 
     $tmin = str_pad($mins,2,'0',STR_PAD_LEFT); 
     $hrs = $thrs; 
     if ($thrs > 12) $hrs = $thrs - 12; 
     $tstr = $hrs.':'.$tmin; 

     echo ' 
     <option value="'.$tstr.'"> 
       '.$tstr.' '.($thrs > 11 ? 'pm' : 'am').' 
     </option>'; 
    } 
} 
echo '</select>'; 

你沒有原始代碼是相同的:

echo '<select>'; 
for($hours=3; $hours<24; $hours++) { // the interval for hours is '1' 
    for($mins=0; $mins<60; $mins+=30) { // the interval for mins is '30' 

     $thrs = str_pad($hours,2,'0',STR_PAD_LEFT); 
    } 
} 
$tmin = str_pad($mins,2,'0',STR_PAD_LEFT); 
$tstr = $thrs.':'.$tmin; 

echo ' 
     <option value="'.$tstr.'"> 
       '.$tstr.' '.($thrs > 11 ? 'pm' : 'am').' 
     </option>'; 

echo '</select>'; 
+0

呃,糟糕。它現在可以工作,但價值是打印下午15:30,而不是下午3:30 ...我想我並不像我想象的那麼近。 – santa

+0

調整爲不使用軍事時間。 –

0

爲什麼不使用JavaScript的使用做它在客戶端?在那旁邊,你的PHP代碼的代碼塊循環

echo '<select>'; 
    for($hours=3; $hours<24; $hours++) // the interval for hours is '1' 
    for($mins=0; $mins<60; $mins+=30) // the interval for mins is '30' 
{ //<==== 
     $thrs = str_pad($hours,2,'0',STR_PAD_LEFT); 
     $tmin = str_pad($mins,2,'0',STR_PAD_LEFT); 
     $tstr = $thrs.':'.$tmin; 

     echo ' 
     <option value="'.$tstr.'"> 
       '.$tstr.' '.($thrs > 11 ? 'pm' : 'am').' 
     </option>'; 
} //<==== 
echo '</select>'; 
0

的缺乏。如果我理解正確,你忘了花括號在for循環{}。由於您重複嵌套for循環,所以必須設置{}括號。

溶液1(含大括號):

for($hours=3; $hours<24; $hours++){ // the interval for hours is '1' 
    for($mins=0; $mins<60; $mins+=30){ // the interval for mins is '30' 
     // Do stuff. 
    } 
} 

溶液2(備用Read This):

for($hours=3; $hours<24; $hours++): // the interval for hours is '1' 
    for($mins=0; $mins<60; $mins+=30): // the interval for mins is '30' 
     // Do stuff. 
    endfor; 
endfor; 
相關問題