如何将时间下拉框默认为当前时间?

时间:2011-11-13 00:13:33

标签: php select time timezone

我有一个用于选择下拉框的PHP脚本,以15分钟的间隔显示时间;但是,我希望它默认为最接近的当前时间(基于15分钟间隔向上或向下舍入)。有什么想法吗?

date_default_timezone_set($_SESSION['TIME_ZONE'])

<label id="time_label" for="time" class="label">Time:</label>

<select id="time" name="time">

    <option value="">Select</option>

    <?

       $start = strtotime('12:00am');
       $end = strtotime('11:59pm');
       for ($i = $start; $i <= $end; $i += 900){
           echo '<option>' . date('g:i a', $i);
       }
    ?>

</select>

2 个答案:

答案 0 :(得分:3)

<label id="time_label" for="time" class="label">Time:</label>

<select id="time" name="time">

<option value="">Select</option>

<?php

$start = strtotime('12:00am');
$end = strtotime('11:59pm');
$now = strtotime('now');
$nowPart = $now % 900;
 if ( $nowPart >= 450) {
    $nearestToNow =  $now - $nowPart + 900;
    if ($nearestToNow > $end) { // bounds check
        $nearestToNow = $start;
    }
} else {
    $nearestToNow = $now - $nowPart;
}
for ($i = $start; $i <= $end; $i += 900){
    $selected = '';
    if ($nearestToNow == $i) {
        $selected = ' selected="selected"';
    }
    echo "\t<option" . $selected . '>' . date('g:i a', $i) . "\n";
}
?>

</select>

这里有一些调试代码:

<?php

echo '<p></p>DEBUG $now = '. date('Y-m-d g:ia', $now) . "<br />\n";
echo "DEBUG \$nowPart = $nowPart<br />\n";
echo 'DEBUG $nearestToNow = '. date('Y-m-d g:ia', $nearestToNow) . "<br />\n";
?>

答案 1 :(得分:2)

以下是将当前时间向上或向下舍入的便捷方式:

$time = time();
$rounded_time = $time % 900 > 450 ? $time += (900 - $time % 900):  $time -= $time % 900;

$start = strtotime('12:00am');
$end = strtotime('11:59pm');
for( $i = $start; $i <= $end; $i += 900) 
{
    $selected = ( $rounded_time == $i) ? ' selected="selected"' : '';
    echo '<option' . $selected . '>' . date('g:i a', $i) . '</option>';
}

您可以使用以下演示进行测试,只需向$time变量添加450或900即可。

编辑:根据以下评论,有一个条件会失败,因为向上舍入的时间会导致到第二天的翻转。要解决此问题,请将$selected行修改为:

$selected = ( ($rounded_time - $i) % (86400) == 0) ? ' selected="selected"' : '';

这会忽略日期部分,只是检查时间。我已更新以下演示以反映此更改。

Demo