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


9

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

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

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

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

回答:


4

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

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

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

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


5
(MySQL-)のtimestamp範囲は1970-01-01 00:00:01 UTC2038-01-19 03:14:07 UTCに制限されていることに注意してください。たとえば、(少なくとも40歳以上の場合は)生年月日を保存することはできません。実際、これtimestampは日付と時刻のレコードを保存するのに最も適していないソリューションです。datetimeフィールドを使用して、すべてをUTCとして保存します。
feeela

7

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


UTC = GMT。私はSQL Serverに慣れています
Rachel

9
UTC!= GMT。UTCは、地球の回転の鈍化によって引き起こされる年の増加期間を補正しますが、GMTは補正しません。実際には用語は交換されていますが、違いを知っておくとよいでしょう。en.wikipedia.org/wiki/Utc

1
@DeveloperArt:気づかなかった、ありがとう:)
Rachel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.