どのように現在の時間にデフォルトの時間ドロップダウンボックスを作るには?

私は15分間隔で時間を表示するための選択ドロップダウンボックスのPHPスクリプトを持っています。しかし、私はそれが最も近い現在の時間(15分間隔に基づいて上または下に)デフォルトにしたいと思います。何か案は?

date_default_timezone_set($_SESSION['TIME_ZONE'])




1
はい、それは正しいです!
追加された 著者 Michael,
現在の時刻が11:53-11:59pmのときに、ドロップダウンリストで 12:00 am を選択してください。
追加された 著者 Yzmir Ramirez,

2 答え




ここで私が残したいくつかのデバッグコード:

<?php

echo '


DEBUG $now = '. date('Y-m-d g:ia', $now) . "
\n"; echo "DEBUG \$nowPart = $nowPart
\n"; echo 'DEBUG $nearestToNow = '. date('Y-m-d g:ia', $nearestToNow) . "
\n"; ?>
3
追加された
ここで上記のコードは11:55 pmのテストケースで動作します(12:00 amオプション、リストの2番目のオプションを選択) codepad.viper-7.com/X5Q6r5
追加された 著者 Yzmir Ramirez,

現在の時刻を四捨五入したり、四捨五入したりする便利な方法は次のとおりです。

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

次のデモを使ってテストすることができます。 $ time 変数に450または900を追加するだけです。

Edit: As per the comments below, there is one condition that will fail because the rounded up time results in a rollover to the next day. To fix it, modify the $selected line to:

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

これは日付の部分を無視して時刻をチェックするだけです。この変更を反映するため、以下のデモを更新しました。

デモ

2
追加された
@YzmirRamirezおっと!コピー/ペーストに余分なカッコがありました。修正されました。
追加された 著者 nickb,
私は問題を見る - 11:48 pm11:59 pm の間は、 12:00 am は正しく表示されますが、次の日にロールオーバーするため、一致が失敗します。今日選択した日を無視するように $ selected の条件を修正しました(私の回答を修正します)
追加された 著者 nickb,
@ YzmirRamirez - 私はその時間範囲内の日付を正しく選択するように答えを更新しました。
追加された 著者 nickb,
$ time = strToTime('11:55pm '); で試したところ、何も選択されていませんでした。それは意図されたのか?
追加された 著者 Yzmir Ramirez,
12:00 amがリストの最初のオプションであるため、動作しているように見えます。しかし、元のケースでは、ドロップダウンの最初の要素として がありました。
追加された 著者 Yzmir Ramirez,
それは今働きます!午後11時55分にテストケースが選択されました。 - codepad.viper-7.com/dh9dOF
追加された 著者 Yzmir Ramirez,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com