2011-01-01 10 views
3

MySQLのNOW()関数を使用して現在のタイムスタンプを取得しても、そのフィールドをPHP経由で取得し、そのタイムゾーンを異なるタイムゾーンに与えることはできますか?基本的に現在のタイムゾーンの現在の時刻を別のタイムゾーンに変換しますか?PHP/MySQLのタイムスタンプとタイムゾーン

答えて

5

あなたはDateTimeZoneクラスを使用することができます。

$gmt = new DateTimeZone("GMT"); 
$datetimeInGMT = new DateTime($now, $gmt); 

また、フォームcontinent/cityで場所をとり、例えばEurope/London

あなたの日時が非UTCである場合は、setTimezoneを使用することができます。

$datetimeInGMT = new DateTime($now, new DateTimeZone("America/New_York")); 
$datetimeInGMT->setTimezone(new DateTimeZone("GMT")); 
+0

私は既に異なるタイムゾーンにタイムスタンプを持っていますか?それを別のタイムゾーンに変換できますか? – John

+0

@John私が追加した新しいコードを試してみてください。 – marcog

+0

+1(もし可能であれば、 'DateTime'のために+ 1)、これが機能することを忘れないでください。開始日を正しく取得するには、mySQLサーバの現在のタイムゾーンを知る必要があります。 MySQLのタイムゾーン設定は、システムのゾーンと異なる場合があります。 –

3

MySQLのタイムゾーン処理は、はるかに洗練されたPHPのよりもです。それは簡単なタイムゾーン(EST、PSTなど)と私は '地域タイムゾーン'(アメリカ/東部)と呼ばれるものを処理します。地域ゾーンを使用すると、DSTルールが長年にわたって変更された場合でも、夏時間を含む適切な変換が使用されます。

私がやったことは、MySQLの関数UTC_TIMESTAMP()を使ってすべてのdatetimeをUTCとして保存することでした。次に、クエリでは、MySQLの関数CONVERT_TZ()をターゲットタイムゾーンに使用します。 http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

注:タイムゾーンテーブルを更新する必要がある場合があります。 http://dev.mysql.com/downloads/timezones.html

+1

PHP 5以降、PHPはより洗練されたものです。「DateTime」クラスはタイムゾーンを完全にサポートしています。 'DateTime'タイムスタンプを設定し、任意のゾーンに相互変換することができます。 MySQLはタイムゾーン情報を 'DATETIME'フィールドにまったく格納できません。それでも、CONVERT_TZはもちろん有効なアプローチです –

+0

必ずしも有効ではありません。この質問に対するAaronsの応答を読んでください。http://stackoverflow.com/questions/1646171/mysql-datetime-fields-and-daylight-savings-time-how-do-i-reference-the-extra –

関連する問題