我需要以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>
一种方法是将所有这些放在一个数组中并使用key =&gt;值对进行循环。但是,我宁愿将它作为一个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
我错过了什么?
答案 0 :(得分: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>';
答案 1 :(得分:0)
为什么不使用javascript在客户端使用它?除此之外,您的PHP代码缺少for循环的代码块
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>';
答案 2 :(得分: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;