1

これを行うには、おそらくもっと簡単な方法があります。私の初心者レベルの PHP のスキルを考えると、これを構築する方法には重大なエラーがあると思います。私は始めたばかりなので、どんな批判も謙虚に受け入れ、より良いプラクティスを学べることを嬉しく思います。

ただし、時間を 2 時間の時間ブロックに分割しようとしています。コードは各ブロックに合わせてコメントされていますが、現在午後5時30分であれば、「午後4時から午後6時」の時間ブロック内にあると言ってほしいです。

時間を適切に選択するためにifステートメントをどのように構成するかは完全にはわかりません。より経験豊富な目のセットが解決策を指摘できる可能性があると思います. 現在含まれている if ステートメントは機能しませんが、単に例として含まれています。

これは明らかに優れたスクリプトの一部ですが、問題は次のコードにあると確信しています。ただし、必要に応じてスクリプト全体を含めることができます。

<?php

date_default_timezone_set('America/Chicago'); // Set default time zone
$currenttime = date("G"); // Set the time in 24 hour format, no leading zeroes

if (0 >= $currenttime && $currenttime < 8) {
    $thisblock="00:00:00"; // Overnights
}

if (8 >= $currenttime && $currenttime < 10) {
    $thisblock="08:00:00"; // Eight to ten.
}

if (10 >= $currenttime && $currenttime < 12) {
    $thisblock="10:00:00"; // Ten to noon.
}

if (12 >= $currenttime && $currenttime < 14) {
    $thisblock="12:00:00"; // Noon to 2:00 PM.
}

if (14 >= $currenttime && $currenttime < 16) {
    $thisblock="14:00:00"; // 2:00 PM to 4:00 PM
}

if (16 >= $currenttime && $currenttime < 18) {
    $thisblock="16:00:00"; // 4:00 PM to 6:00 PM
}

if (18 >= $currenttime && $currenttime < 20) {
    $thisblock="18:00:00"; // 6:00 PM to 8:00 PM
}

if (20 >= $currenttime && $currenttime < 22) {
    $thisblock="20:00:00"; // 8:00 PM to 10:00 PM
}

if (22 >= $currenttime && $currenttime < 24) { 
    $currentblock="22:00:00"; // 10:00 PM to midnight
}

?>
4

2 に答える 2

1

あなたの説明によると、これはあなたが望むことを行います:

function get_time_block($currenttime)
{
    // if time is before 8, we'll just return the first, 8-hour block
    if ($currenttime < 8)
    {
        return '00:00:00';
    }

    // otherwise, return the first dividable-by-two number before this number as a block
    return sprintf("%02d:00:00", $currenttime - $currenttime%2);
}

テストするには:

for ($i = 0; $i < 24; $i++)
{
    print($i . ': ' . get_time_block($i) . '<br />');
}

これは以下を出力します:

0: 00:00:00
1: 00:00:00
2: 00:00:00
3: 00:00:00
4: 00:00:00
5: 00:00:00
6: 00:00:00
7: 00:00:00
8: 08:00:00
9: 08:00:00
10: 10:00:00
11: 10:00:00
12: 12:00:00
13: 12:00:00
14: 14:00:00
15: 14:00:00
16: 16:00:00
17: 16:00:00
18: 18:00:00
19: 18:00:00
20: 20:00:00
21: 20:00:00
22: 22:00:00
23: 22:00:00

..これはあなたが探しているもののようです。

于 2012-12-16T01:11:02.947 に答える
0

時間をかけて適切な間隔に「丸める」単純な式を使用して、任意の間隔のセットを取得できます。あなたの場合、次のようなものが必要です:

ceil($time/$interval)*$interval

したがって、あなたの場合、次のようなことができます:

$current_hour = date('G');
$check_hour = ceil($current_hour/2)*2;
switch ($check_hour) {
case 2:
...
case 4:
...
}

時間を変更したい場合は、簡単です。同様の数式は、任意の間隔 (時間、分、秒など) で機能します。

于 2012-12-16T03:22:32.503 に答える