2009-12-05 10 views
8

私は自分のサイトのユーザーログインに日付を格納しようと考えていますが、最も論理的な解決方法は何か分かりません。MySQL:サーバーのタイムゾーンまたはユーザーのタイムゾーンを維持しますか?

最初は、サーバーのタイムゾーンを使用して、サーバーマシンの日付とユーザーのマシンの日付の間の差分操作を使用して管理しますが、タイムゾーンとPHPクラスの日付を使用してdirecltyを変更することも考えました。

<?php 
// my server has for example America/New_York timezone 
$user_timezone = "Europe/Rome"; 
date_default_timezone_set ($user_timezone); 
$date = date ('Y-m-d H:i:s'); 
$sql = "UPDATE users SET user_last_modify = '$date', user_timezone = '$user_timezone' WHERE user_id = 'some id' LIMIT 1;"; 
$res = mysql_query ($sql); 
?> 

私の質問は、最善の解決策は、サーバーのタイムゾーンを維持するか、ユーザーのタイムゾーンを使用することですか?
ユーザーのタイムゾーンを使用する場合は、私の例のようにタイムゾーン名を保存する必要がありますか?

答えて

14

ユーザーごとに異なるデータを保存するのではなく、サーバーのタイムゾーンまたはUTCを使用することをおすすめします。この方法では、データベースは完全に一貫しており、各エントリについてuser_timezone列をフェッチして変換を実行することなく、比較のような操作を実行できます(完全にフリーではありません)。

+1

UTCはほとんどのものを簡素化できます。特にDSTスイッチ –

+4

+1ですが、サーバータイムゾーン上のUTCではさらにそうです。後でサーバーを移動したい場合や、世界中に複数のサーバーがある場合はどうなりますか? –

+0

おかげさしで助けてくれてありがとうございます。また、あなたはoffestsのrespecitveを持つUTCテーブルについて知っていますか? -1100、-1200、-1300など – vitto

1

ちょうど使用してください:

time(); 
2

UTCを使用してください。それはあなたに多くの時間の欲求を救うでしょう。

ユーザーの現地時間はプレゼンテーションの問題です。データベース内の各レコードの日付フィールドのTZを追跡するのではなく、特定のユーザーのローカル時刻に変換するのがずっと簡単です。

でも魅力的かもしれサーバーのタイムゾーンを使用している場合、DSTルールが(参照: Argentina DST 2009を - 政府がAPPX、DSTを使用しないという決定をしたことが起こることになっていた1週間前。) 非常に短期間に変更されることがあり

;場合によっては、タイムゾーン自体が変更されることがあります(Time in Indiana参照)。 UTCの定義は、このような劇的な変更を受ける可能性は低いです。

(米国西海岸にサーバーを設置し、米国東海岸に移動し、アプリがサーバー時間を使用していたため、すべての地獄が崩壊しました)仮想化を使用すると、サーバは異なる大陸です。)

関連する問題