2011-11-13 71 views
1

我有一個選擇下拉框的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> 
+0

只是要清楚在當前時間是11:53-11:59pm下拉應選擇'12:00 am',是否正確? –

+0

是的,這是正確的! – Michael

回答

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>'; 
} 

您可以使用下面的演示測試,只需將450或900添加到$time變量。

編輯:根據下面的評論,有一個條件將失敗,因爲四捨五入時間會導致第二天轉入。爲了解決這個問題,修改$selected行:

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

這忽略日期部分,只是檢查的時間。我已經更新了下面的演示以反映這一變化。

Demo

+0

@YzmirRamirez哎呀!在複製/粘貼中有一個額外的括號。固定,現在應該工作正常,謝謝! – nickb

+0

剛試過'$ time = strToTime('11:55pm');'並沒有選擇任何東西。那是打算? –

+0

它看起來像是有效的,因爲12:00是列表中的第一個選項。但在原始情況下,有一個''作爲下拉菜單中的第一個元素。下面是測試'

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"; 
?> 
+0

這裏上面的代碼有一個11:55 pm的測試用例(選擇12:00 am選項,列表中的第二個選項)http://codepad.viper-7.com/X5Q6r5 –

相關問題