過去 14 日間 (日を含む) ごとに 1 行のシステム ステータス テーブルをサイトに表示しています。次に、列ごとに、その日に発生したイベントを MySQL データベースから選択します。
MySQL のすべてのデータは UTC で保存され、PHP も UTC で動作します。私は2つの問題を抱えています:
たとえば、ユーザーが東部時間の場合、東部ユーザーの場合は午後 8 時だったにもかかわらず、グリッドは明日の日付を表示するように更新されていました。私はこれを行うことでそれを解決したと思います:
while ($i < 14) { //SET STATUS DATE $status_date = date("Y-m-d H:i:s", strtotime("-$i day")); //LOCALIZE TIMES $status_date = new DateTime($status_date); $status_date->setTimeZone(new DateTimeZone('America/New_York')); echo $status_date->format("F j, Y"); }
次の問題は、イベントの検索です。各イベントにはデータベースに INCIDENT_START フィールドがあり、次のようにクエリします。
SELECT INCIDENT_STATUS FROM TABLE_system_status WHERE SYSTEM_AFFECTED='WEBSITE' AND INCIDENT_START BETWEEN '$start_time' AND '$end_time' ORDER BY INCIDENT_START DESC LIMIT 1
これが私の問題です。と を使用する$start_time = $status_date->format("Y-m-d 00:00:00")
と$end_time = $status_date->format("Y-m-d 23:59:59")
、インシデントがテーブル内の正しい日に表示されません。
例: データベース内のイベントの INCIDENT_START 時刻は 2013-03-19 01:02:01 UTC で、これは 2013-03-18 21:02:01 EDT と同じです。ただし、この場合、テーブルの 3 月 19 日の列にはまだ表示されています。
要するに....データベースではUTCであっても、ユーザーの現地時間で00:00:00から23:59:59までのイベントを取得できる必要があります。これを複雑にしすぎているような気がしますが、さまざまな組み合わせを試してみましたが、うまくいかないようです。どんな助けにも本当に感謝します!