我有一个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>
<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";
?>
下面是获取当前时间上下四舍五入的方便方法:
$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。
Edit:根据下面的注释,有一个条件将失败,因为舍入时间导致滚动到第二天。要修复它,将$selected
行修改为:
$selected = ( ($rounded_time - $i) % (86400) == 0) ? ' selected="selected"' : '';
忽略日期部分,只检查时间。我已经更新了下面的演示以反映这个变化。
演示