29

私はこのトピックについて過去数時間読んでいて、理解できたと思いますが、確認が必要です.

状況

たとえば、カリフォルニアのユーザーが、MySQL に保存されるコメントを投稿できるようにしたいと考えています。次に、たとえばテキサス州のユーザーが、自分のタイムゾーンに合わせて投稿日を調整してコメントを表示できるようにしたいと考えています。

提案された解決策

保管

  1. すべての日付関数が UTC タイムゾーンを使用するように、アプリケーションの開始時に次を実行します。date_default_timezone_set('UTC');
  2. $Date = new DateTime();UTC で現在の日付と時刻を持つ DateTime オブジェクトを取得します。
  3. $Date->format()MySQL の datetime 型の列に挿入する値を取得するために使用します。

表示中

  1. JavaScript からユーザーのタイムゾーン情報を取得し、Cookie に保存します。
  2. MySQL SELECT クエリを実行して、datetime 列の値を取得します。
  3. $Date = new DateTime($row['time']);格納された UTC 時刻で DateTime オブジェクトをインスタンス化します。
  4. $Date->setTimezone(new DateTimeZone($userTimezone));UTC 時刻をユーザーのタイムゾーンに合わせます。
  5. を使用して表示$Date->format();

それは何をしなければならないかの要点ですか?より良い解決策がありませんか?ご協力いただきありがとうございます!

4

2 に答える 2

14

それはさらに簡単にすることができます。JavaScript を使用しているので、JavaScript を使用してクライアントのタイムゾーンも調整してみませんか?

  1. すべての時刻を UTC としてサーバーに保存する
  2. それらをUTCとしてクライアントに提供します
  3. クライアントは JavaScript を使用して時刻をローカル タイム ゾーンに合わせます

これにより、物事が単純になるだけでなく、モデルの問題も解決されます。アカウントをニューヨークで登録し、オーストラリアに旅行している場合、オーストラリアのタイム ゾーンに従って時間を表示したいと考えています。実際、使用している JavaScript を使用すると、設定を簡単に調整でき、デザインがさらに動的になります。次に、ユーザーのタイム ゾーンを格納するオーバーヘッドを回避できます。

そうは言っても、デザインを非 JavaScript ブラウザーに劣化させたい場合は、(JS に依存して Cookie をフェッチするのではなく) HTTP Cookie に依存する完全なサーバー側アプローチを採用する方が適切です。

于 2009-02-05T23:08:41.443 に答える
3

あなたはそれをすべての権利で行います。すべての日付をUTC(GMT + 0)で保存し、データベースからそのように取得して、ユーザーのオフセットを適用します。

基本的に、最初から最後まですべてをカバーしているので、追加するものは何もありません。すでに行っていることを超えて最適化できるとは思いません。

于 2009-02-05T22:43:25.893 に答える