日期选择器,增量为30分钟

时间:2017-07-20 03:20:39

标签: php

我需要以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

我错过了什么?

3 个答案:

答案 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;