ユーザーとは異なるタイムゾーンに対処しなければならない Web サイトを開発しています。ウェブサイトはオークションのような時間に敏感なイベントを主催しているため、これは大きな問題になります.
サーバー上のすべての日付/時刻は UTC です。データベースはすべてを UTC タイムスタンプで保存します。PHP のデフォルトのタイムゾーンも UTC に設定されています ( date_default_timezone_set('UTC');
)。
さて、私の問題は、日付のみを表示するか、さらに重要なことに、ユーザー入力から日付/時刻を読み取るかどうかにかかわらず、ユーザーと対話する方法です。
具体例:
- オークションには締め切りがあり、UTC としてデータベースに保存します。
- Web サイトでオークションを表示すると、JavaScript タイマーが
Date
オブジェクトを使用して残り時間を計算します。タイムゾーンを自動的に GMT+0100 (私のローカル タイムゾーン) に変換します。したがって、締め切りが'2013-08-08 10:46:08'
(UTC) の場合、JavaScript の日付オブジェクトは を返しAug 08 2013 11:26:15 GMT+0100 (GMT Standard Time)
ます。 - 現在の時刻が 11:46:08 より大きい場合、タイマーは残り時間が 00:00 であることを示します (これは正しいです)。
しかし、入札を挿入しようとすると、の条件が次のように
MySQL INSERT
評価されるため、サーバーは受け入れtrue
ます。入札に挿入 ... WHERE ... AND オークション期限 > NOW() ...
( なぜなら、uction_deadline ='2013-08-08 10:46:08'
と NOW() = '2013-08-08 10:26:50'
)
タイムゾーンのこの巨大なジャンボはすべて、私の脳を溶かします。ここで何が欠けていますか?データベース内にすべての日付/時刻を UTC で保存するのが最善であることはほぼ確実です。ユーザーとデータベースの間でそれをどのように処理するのか、はっきりとはわかりません。