简短的PHP代码来生成小时选项

时间:2017-06-26 18:38:58

标签: php select

使用PHP生成这个html代码有一个更短的方法吗?

基本上它只是一个带有数小时工作选项的选择输入(每30分钟是另一个选项)。

<select>
<option value="0" selected="selected" >From:</option>
<option value="8:00" >8:00</option>
<option value="8:30" >8:30</option>
<option value="9:00" >9:00</option>
<option value="9:30" >9:30</option>
<option value="10:00" >10:00</option>
<option value="10:30" >10:30</option>
<option value="11:00" >11:00</option>
<option value="11:30" >11:30</option>
<option value="12:00" >12:00</option>
<option value="12:30" >12:30</option>
<option value="13:00" >13:00</option>
<option value="13:30" >13:30</option>

... And so on up to 7:30 ...

<option value="7:30" >7:30</option>
</select>

4 个答案:

答案 0 :(得分:2)

这很有效。可能要小一些。

while ($o <= 47) {
    $date = new DateTime("08:00:00");
    $date->add(new DateInterval("PT".($o*30)."M"));
    echo '<option value="'. $date->format('H:i') .'" >'. $date->format('H:i') .'</option>';
    $o ++;
}

循环是四十七,因为有24 * 2的增量减去一小时。

将输出以下内容:

<select>
<option value="08:00" >08:00</option><option value="08:30" >08:30</option><option value="09:00" >09:00</option><option value="09:30" >09:30</option><option value="10:00" >10:00</option><option value="10:30" >10:30</option><option value="11:00" >11:00</option><option value="11:30" >11:30</option><option value="12:00" >12:00</option><option value="12:30" >12:30</option><option value="13:00" >13:00</option><option value="13:30" >13:30</option><option value="14:00" >14:00</option><option value="14:30" >14:30</option><option value="15:00" >15:00</option><option value="15:30" >15:30</option><option value="16:00" >16:00</option><option value="16:30" >16:30</option><option value="17:00" >17:00</option><option value="17:30" >17:30</option><option value="18:00" >18:00</option><option value="18:30" >18:30</option><option value="19:00" >19:00</option><option value="19:30" >19:30</option><option value="20:00" >20:00</option><option value="20:30" >20:30</option><option value="21:00" >21:00</option><option value="21:30" >21:30</option><option value="22:00" >22:00</option><option value="22:30" >22:30</option><option value="23:00" >23:00</option><option value="23:30" >23:30</option><option value="00:00" >00:00</option><option value="00:30" >00:30</option><option value="01:00" >01:00</option><option value="01:30" >01:30</option><option value="02:00" >02:00</option><option value="02:30" >02:30</option><option value="03:00" >03:00</option><option value="03:30" >03:30</option><option value="04:00" >04:00</option><option value="04:30" >04:30</option><option value="05:00" >05:00</option><option value="05:30" >05:30</option><option value="06:00" >06:00</option><option value="06:30" >06:30</option><option value="07:00" >07:00</option><option value="07:30" >07:30</option></select>

答案 1 :(得分:1)

为了好玩:

foreach(range(strtotime('8:00'), strtotime('19:30'), 1800) as $time) {
    $val = date('g:i', $time);
    echo '<option value="'.$val.'">'.$val.'</option>';
}
  • 以30分钟为增量(1800秒)创建一系列时间
  • 循环此范围并将时间转换为正确的格式
  • 在选项中使用此格式化时间

如果在更改夏令时的日期/时间运行此操作,则无法正常运行。你可以通过设置一个没有夏令时的时区来缓解这种情况:

date_default_timezone_set('UTC');

答案 2 :(得分:0)

您可以使用for循环来回显<option>代码,并像这样生成时间。

<select>
<option value="0" selected="selected" >From:</option>
<?
    $hour = 7;
    $min = 30;
    for ($x=0;$x < 48;$x++) {
        if ($min < 30) {
            $min += 30;
        } else {
            if ($hour < 24) {
                $min = 0;
                $hour += 1;
            } else {
                $hour = 1;
                $min = 0;
            }
        }
        $hour = sprintf("%02d", $hour);
        $min = sprintf("%02d", $min);
        echo '<option value="'.$hour.':'.$min.'">'.$hour.':'.$min.'</option>';
    }
?>
</select>

注1 :未经测试,可能无法正常使用 注2 :我也知道,“它不短!”

更新

我在单位数字之前添加了前导零以匹配您的格式。

答案 3 :(得分:0)

例如:

<?php
$start = 8 * 60 * 60;
$step = 30 * 60;

$opts = '';
for ($i = 0; $i < 10; $i++) {
    $time = date('H:i', $start + $i * $step);
$opt = <<<OPT
<option value="{$time}">{$time}</option>
OPT;
    $opts .= $opt;
}

echo <<<OPTS
<select>
<option value="0" selected="selected" >From:</option>
{$opts}
</select>
OPTS;