2011-02-05 5 views
1

PHPアプリケーションを構築するときに、私はいつもサーバタイムとタイムゾーンですべてを再生しようとするのに問題があります。PHP + MySQLビルドサーバーのタイムゾーンに依存しないスクリプト?

私は一般に、更新されないほとんどの私のレコードに単純なタイムスタンプのようなフィールドを持っています。イベントが発生したとき、ユーザーが登録されたとき、コメントが作成されたときなどを追跡するときに使用します。

この値を格納するためにDatetimeフィールドを使用するベストプラクティスに従っています。問題は、異なるサーバーを使用する場合、異なるタイムゾーンを持つことが多いため、相違を相殺するためのコードを追加しない限り、日時は近くでも一致しません。これは、MySQLレプリケーションとNOW()クエリを使用するときに問題になる可能性があります。

私はintsを使うべきかどうかは、タイムゾーンについては何も気にしないと思っているだけで、サーバクロックが設定されている必要があるからです。欠けているのは、私が使用していないMySQLの日付/時刻関数はすべて将来的には問題になる可能性があるということです。残念ながら、私はdatetimesではなく4byteのintに戻ってストレージスペースを半分に減らすことができます。

また、intsは2037年までしか動作しないと言われています。なぜそれが問題なのですか?誰が2037年にPHP + MySQLを使用する予定ですか?

紛失しているものはありますか? Unixのタイムスタンプのような無関係な方法で参照時間を保存する方が良いでしょうか?

+0

「2037年にPHP + MySQLを使用する予定の方は?」誰が2011年にも主要なプロトコルとしてIPv4を使用しているか、IE6のような旧式のソフトウェアを使用すると予想されるのでしょうか... –

答えて

2

すべてのデータベース作業で日付/時刻フィールドを使用しますが、すべてをGMTで保存します。私のコードでは、何かをGMTに変換する最初の機会がかなりあり、gmtなどのすべての内部計算を行います。GMTからローカルタイムに変換する唯一の時間は、ユーザーに表示するときです。 PHPにはGMTのunixtime()とgmstrftimeとgmdateがあります。あなたが必要とするものはほとんどありません。

+0

+1すべてをGMTとして保存します – rxgx

+0

したがって、すべてのサーバMySQLと一緒に 'date_default_timezone_set( 'GMT')'として正しく設定されていますか? – Xeoncross

+0

date_default_timezone_setが役立つようです。私はそれをPHPの新しい追加として使用したことはありませんし、私は古いバージョンでも動作するように私のもののほとんどをコーディングしようとします。私は手動で、私が必要とするタイムゾーン変換を手動で行うだけです。 – Patrick

関連する問題