0

我想知道是否可以对以下 PHP 脚本进行一些性能调整。我想要做的 - 从上午 00:00 到下午 23:30 每隔半小时进入一个选择列表。这是代码

<?php
$starttime = '00:00';
$time = new DateTime($starttime);
$interval = new DateInterval('PT30M');
$temptime = $time->format('H:i');
do{
   echo '<option value="">'.date("H:i a", strtotime($temptime)).'</option>';
   $time->add($interval);
   $temptime = $time->format('H:i');
}while ($temptime !== $starttime);
?>

我相信有一种方法可以让我们以更简单的方式做到这一点——但我想不出。有人可以帮忙吗?

4

4 回答 4

3

除了对值进行硬编码之外,您还可以丢失所有的DateTimeandTimeInterval对象并使用一个简单的循环:

for ($h=0;$h<24;$h++) {
    echo '<option>' + sprintf ( "%02d", $h ) + ':00</option>';
    echo '<option>' + sprintf ( "%02d", $h ) + ':30</option>';
}
于 2012-09-18T08:11:10.037 回答
2

如果性能是您所追求的,那么硬编码时间字符串可能是您能做的最好的事情。

既然它们不会改变,你真的不需要它们动态,对吗?

于 2012-09-18T08:11:46.067 回答
1
foreach (range(0, 60*24, 30) as $minutes) {
    echo '<option>' . date('H:i a', strtotime('00:00 +' . $minutes . ' minutes')) . '</option>';
}
于 2012-09-18T08:11:30.810 回答
1

直到一天有 24 小时,你可以使用一个好的 ol' for

<select>
    <?php for($i = 0; $i < 48; $i++): ?>
        <option><?php echo $i%2 == 0 ? ($i / 2) . ':00' : intval($i / 2) .':30'; ?></option>
    <?php endfor;?>
</select>
于 2012-09-18T08:13:35.673 回答