3

我正在尝试为显示时间创建一个下拉列表。我的选项标签应该是这样的

<option value="1">01.00AM</option>
<option value="2">02.00AM</option>
<option value="3">03.00AM</option> and so on 

所以我能知道有没有一种快速的方法来创建数组,而不是在选项标签中输入每个小时?

注意:上午和下午应根据时间显示。

我用这段代码试过了,但它对我不起作用..

<select>
<?php for($i = 0; $i < 24; $i++): ?>
  <option value="<?= $i; ?>"><?= $i % 12 ? $i % 12 : 12 ?>:00 <?= $i >= 12 ? 'pm' : 'am' ?></option>
<?php endfor ?>
</select>
4

5 回答 5

8

Fresh Prince已删除答案的轻微变体

我将这个问题的大部分归功于新鲜王子,但由于他删除了他的原始答案,我发布了它的一个变体,没有混合的回声标签和奇怪的连接。

<select id='time'>
<?php for($i = 1; $i <= 24; $i++): ?>
    <option value="<?= $i; ?>"><?= date("h.iA", strtotime("$i:00")); ?></option>
<?php endfor; ?>
</select>

注意:我使用的是短回显标签<?=,因为原始帖子使用了它们。<?php echo如果您正在编写需要支持旧版本 PHP 的可移植代码,我建议您将其替换为。

输出格式

此脚本的输出格式为:

<select id='time'>
    <option value="1">01.00AM</option>
    <option value="2">02.00AM</option>
    ...
    <option value="23">11.00PM</option>
    <option value="24">12.00AM</option>
</select>

这是一个现场演示

于 2013-09-05T14:54:19.043 回答
5

为什么不只使用strtotimeand date

date("h.iA", strtotime($i . ":00"))

查看演示


将其应用于您的示例,

<?php 
    for($i = 0; $i < 24; $i++):
        echo "<option value=\"$i\">" . date("h.iA", strtotime($i . ":00")) . "</option>\n";
    endfor;
?>

或者,

<?php
    for($i = 0; $i < 24; $i++, $d = date("h.iA", strtotime($i . ":00:00"))) {
       echo "<option value=\"$i\">$d</option>\n";
    }
?>

最后,

for($i = 0; $i < 24; print "<option value=\"$i\">" . date("h.iA", strtotime($i . ":00:00")) . "</option>\n", $i++);

查看演示

于 2013-09-05T13:41:26.297 回答
1

不需要所有那些凌乱的 php 标签。

for ($i=0; $i<24; ++$i) {
  $t = date("H.iA", strtotime($i.":00:00"));
  echo '<option value="'.$i.'">'.$t.'</option>';
}
于 2013-09-05T13:47:40.373 回答
1

查看以下演示: http ://phpfiddle.org/main/code/8y7-hut - 其中sprintf格式化功能用于填充前导 0。

以下是使用的代码:

<select>
<?php for($i = 0; $i < 24; $i++): ?>
    <option value="<?php echo $i+1; ?>"><?php printf('%1$02d.00',(($i+1) > 12)? ($i+1)-12 : $i+1)?><?php echo (($i < 12)? 'AM' : 'PM'); ?></option>
<?php endfor ?>
</select>
于 2013-09-05T14:14:01.533 回答
0

尝试这个:

$start = '12:00AM';
$end = '11:59PM';
$interval = '+1 hour';

// $interval = '+30 minutes';
// $interval = '+15 minutes';

$start_str = strtotime($start);
$end_str = strtotime($end);
$now_str = $start_str;

echo '<select>';
while($now_str <= $end_str){
    echo '<option value="' . date('h:i A', $now_str) . '">' . date('h:i A', $now_str) . '</option>';
    $now_str = strtotime($interval, $now_str);
}
echo '</select>';

这是一个工作示例。

于 2013-09-05T13:47:58.097 回答