-1

タイムスタンプを使用して、同じ期間に 2 人がオンラインであるかどうかを確認しています。参考までに、UTC タイムスタンプを次に示します。

date_default_timezone_set('UTC');
$utc12am = 1380585600;
$utc1am = 1380589200;
$utc2am = 1380592800;
$utc3am = 1380596400;
$utc4am = 1380600000;
$utc5am = 1380603600;
$utc6am = 1380607200;
$utc7am = 1380610800;
$utc8am = 1380614400;
$utc9am = 1380618000;
$utc10am = 1380621600;
$utc11am = 1380625200;
$utc12pm = 1380628800;
$utc1pm = 1380632400;
$utc2pm = 1380636000;
$utc3pm = 1380639600;
$utc4pm = 1380643200;
$utc5pm = 1380646800;
$utc6pm = 1380650400;
$utc7pm = 1380654000;
$utc8pm = 1380657600;
$utc9pm = 1380661200;
$utc10pm = 1380664800;
$utc11pm = 1380668400;

私が遭遇する問題は、誰かが午後 10 時から午前 12 時までの間オンラインであると言った場合、1380668400 から 1380585600 の間で逆方向に進んでいると言っているようなもので、コード全体が失われます。日ではなく時間を定義するだけのタイムスタンプを作成するにはどうすればよいですか? または、これを回避するにはどうすればよいでしょうか? 私の脳は燃えています。

アップデート

頭痛の種の後、答えは必要以上に単純です。すべての日付は静的であるため、動的に取得することは計画していません。日付関数のみを使用しているため、新しい UTC 値を書き出す必要はありません。すべてのタイムゾーン。とにかく、私は絵を描きましたが、それは本当に助けになりました。$max が $mina - $maxa の境界内にあるかどうか、または $min が $mina - $maxa の境界内にあるかどうかを確認するだけで済みます。こんなに時間がかかったなんて信じられない

    $blend = 'False';
    if((($maxa > $min) And ($maxa < $max)) Or (($mina > $min) And ($mina < $max))) {
        $blend = 'True';
    }
    if($min > $max) {
        if(($mina > $min) Or ($mina < $max)) {
            $blend = 'True';
        }
        if(($maxa > $min) Or ($maxa < $max)) {
            $blend = 'True';
        }
    }
    if($min === $max) $blend = 'True';
4

2 に答える 2

1

タイムスタンプには、Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) から経過した秒数が格納されます。

これは、そのエポックから秒数をカウントするだけで、必要なもの (日、月、時間など) を取得できることを意味します。ありがたいことに、PHP はそれを簡単にしてくれます。

これは、タイムスタンプからの 24 時間形式の現在の「時間」です。

$hour = date("G", 1380621600);

これは、1380621600 から 1380621600+3599 までのすべてのタイムスタンプが 10 (am) を返し、それが探しているものであることを意味します。

午前 10 時から午前 12 時の間に誰かがオンラインだったかどうかを知りたい場合は、午前 10 時から 12 時の間にあるかどうかを確認しますdate("G",<timestamp>)

2013 年 10 月 1 日の 10 時から 12 時の間に誰かがオンラインであったかどうかを確認したい場合は、前のメソッドに追加の引数を追加して、必要なものを正確に取得できます。

$year = date("Y", <timestamp>);  
$month = date("F", <timestamp>);  
$date = date("j", <timestamp>);

冒険したい場合は、explode を使用してワンステップでこれを行うこともできます。

$logged_in = date("Y F j G", <timestamp>)

2 人のユーザーが同時にオンラインであるかどうかを確認したい場合は、全員の「オンライン時間」を並べ替え、リストを 1 回線形スキャンして (現在把握できる時間を使用して) オーバーラップを把握します。


参考文献:

PHP - 日付
PHP - 爆発

于 2013-10-01T17:34:03.543 に答える