2010-11-22 7 views
1

私のサーバーは米国にあり、私は英国にいます。タイムゾーンの問題mysql

デフォルトのCURRENT_TIMESTAMPを使用して、タイムスタンプ値をmysqlサーバに保存します。したがって、エントリが自分のテーブルに追加されると、現在の時刻がスタンプされます。これはサーバ時間(US)であり、mysqlによってUTCに変換されます。

私が現在のタイムゾーン(UK)に表示したい値を取得するとき。だから私のPHPで、私は現在のタイムゾーンを設定するには、次の関数を使用します。それぞれ00:

mysql_query("SET time_zone = timezone;"); 

をこれは私がサーバーとのセッションタイムゾーンをエコーするためのmysqlを要求したとき、私は、SYSTEMおよび-08を得るように動作するようです。

しかし、私は後でタイムスタンプ値を同じPHPスクリプトで印刷すると、米国時間に出力されます。

PHPでの結果の取得:

$result = mysql_query("SELECT ID,DateTime,Name,Comment,Location,Rating FROM table1 WHERE Latitude<$latup AND Latitude>$latdown AND Longitude<$lngup AND Longitude>$lngdown ORDER BY DateTime DESC") 

while(($row = mysql_fetch_array($ratingresult)) && ($i++ < 1)) { 
    echo "<tr><td>"; 
    echo $row['DateTime']; 
    echo "</td><td>"; 
    echo $row['Name']; 
    echo "</td><td>"; 
    echo $row['Comment']; 
    echo "</td><td>"; 
    echo $row['Location']; 
    echo "</td><td>"; 
    echo $row['Rating']; 
    echo "</td><td>"; 
    rate($row, $lat, $lng); 
    echo "</td></tr>"; 
} 

すべてのヘルプは本当にいただければ幸いです!

+1

あなたがPHP –

+0

のタイムスタンプ値を印刷する場合は特に、いくつかのコードを示し、 'SET time_zone'クエリが同じ要求中に行われますタイムスタンプを取得するクエリ? –

+0

そうは思わない私は今それを次のように変更しました: – Sam

答えて

0

MySQLで複数のタイムゾーンを扱うのは難しいことがあります。

このようなセッション単位でタイムゾーンを変更することには本当に注意が必要です。 TIMESTAMPフィールド(実質的には01-01-1970 00:00:00 GMTからの秒数)から取得した表示結果を変更するだけでなく、DATETIMEフィールドに挿入されたデータも変更されます)、および/またはNOW()が評価される方法。

手遅れではありませんし、アプリケーションがそれを許すならば、私は英国にサーバー/グローバルタイムゾーンを設定することをお勧めします(とあまりにものmy.cnfにおけるそれぞれの変更を行う)したい:

例えばhttp://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html

あるいは、単に変換-する/軒並みDATETIME Sを使用からmysql> SET GLOBAL time_zone = timezone; - 。あなたのセッションがであるタイムゾーンの変換を行う際に確認すること

0

私はPHPを使用して問題を解決しました。

$dt_obj = new DateTime($row['DateTime'], new DateTimeZone('America/Chicago')); 
$dt_obj->setTimezone(new DateTimeZone('Europe/London')); 
echo $dt_obj->format('d-m-Y H:i:s'); 

これは、アメリカのサーバーがCST =シカゴのタイムゾーンにあるためです。また、mysqlのタイムゾーンを変更しようとする試みをすべて削除しました。私は、サーバーのタイムゾーンを変更することは、一部の人のための解決策だと確信していますが、私は共有サーバー上にあるので、アクセス許可を持っていません。

私の質問は今です - 私のウェブサイトを世界的に働かせる方法はありますか?すなわち、ユーザーの実行時間を検出することによって?私はこれがjavascriptを必要とすると仮定します。

0

右の結果を実行するために、このコードを確認してください:

date_default_timezone_set('Europe/London'); 
mysql_query("SET time_zone = '".date('P')."';"); 
+0

このコードはなぜ機能しますか?これは6年前の質問であると認識していますか? – Martin

関連する問題