web-dev-qa-db-ja.com

さまざまなTimeZonesを処理する最良の方法は何ですか?

私は世界中から多くの異なるユーザーが更新を行うWebアプリケーションに取り組んでいます。タイムゾーンを処理するための最良の方法は何でしょうか?理想的には、イベントが発生すると、すべてのユーザーが現地時間を使用してそれを表示します。

サーバーのOS時間をGMT、物理的な場所の時間、または開発場所の時間に設定する必要がありますか?

アプリケーションロジック(PHP)とデータベース(MySQL)は、データをGMTまたは現地時間(ユーザーにとってローカル)として保存するように設定する必要がありますか?

業界標準、または私が見ていなかった単純で明白なソリューションさえありますか?

9
Thomas Hunter

イベントをMySQLのTIMESTAMP形式で保存します。サーバーやユーザーのタイムゾーンに関係なく、内部的にUTCとして保存されます。このように、サーバーの特定の構成に関係なく、データは移植可能です。特定のタイムゾーンに保存すると、別のタイムゾーンに変換する作業がはるかに多くなります。

PHPのさまざまな日付/時刻関数(date()など)で使用するために、データベースから数値タイムスタンプに(UNIX_TIMESTAMP()関数を使用して)フェッチします。

次に、各ユーザーにPHPタイムゾーンを使用して date_default_timezone_set() を設定する必要があります-その情報は、ユーザーが構成可能な設定を介して、またはブラウザーのヘッダーから取得できます(あまり正確ではありません)その後、通常どおりPHP日付/時刻関数を使用できます。出力はユーザーのタイムゾーンになります。

別の方法は、相対時間を表示することです(例:「5時間2分前」)。

4
Eran Galperin

データベースでUTC時間を使用し、必要に応じてクライアントに現地時間に変換させる

7
Rachel