2012-10-17 5 views
6

DateTimeオブジェクトから、私は異なるTimeZonesで時間を取得することに興味があります。 としては、DateTimeオブジェクトを文字列から作成されたときに、これはかなりうまく機能し、DateTime::setTimezone DOCで説明:PHP DateTimeオブジェクト - タイムスタンプとタイムゾーンの競合

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('UTC')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

echo $date->getTimestamp() . "\n"; 

上記の例は、あろう出力:
2000-01-01 00:00:00 + 12: 00
2000-01-01 01:45:00 + 13:45
1999-12-31 12:00:00 + 00:00

今興味深い部分です:我々は選択した場合私たちのタイムスタンプをアップし、手動の指示に従ってDateTimeオブジェクトを開始してください。

$date2 = new DateTime('@946641600'); 

$date2->setTimezone(new DateTimeZone('Pacific/Nauru')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

$date2->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

$date2->setTimezone(new DateTimeZone('UTC')); 
echo $date2->format('Y-m-d H:i:sP') . "\n"; 

echo $date2->getTimestamp() . "\n"; 

そしてここで我々が得る:// [編集]ヒュム...申し訳ありませんが、この出力は間違っている...
1999-12-31 12:00:00 + 00:00
1999- 12-31 12:00:00 + 00:00
1999-12-31 12:00:00 + 00:00

UTC永遠に!もうタイムゾーンを変更することはできません!

PHPかそれとも私ですか?バージョン5.3.15

+1

タイムスタンプでインスタンス化する際にタイムゾーンを指定する予定はありませんか? –

+0

ここに別の結果が出ていますhttp://codepad.viper-7.com/zAv8dz – Baba

+0

バージョン5.3.15で正常に動作します....... – Baba

答えて

5

オクラ、私は怒っていました。もちろん、私は間違っている人です...
これを真似するために、私はちょうどherehereの文書に関連するビットを取り上げます。
マニュアルは言う:

// Using a UNIX timestamp. Notice the result is in the UTC time zone. 
$date = new DateTime('@946684800'); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

をだから、確かに、あなたのタイムゾーンで再び時間を取得するためにsetTimezoneを使用することができます(お使いのシステムは、そのように設定されている場合に予想することができた!):

$timezone = new DateTimeZone('Europe/Madrid'); 
$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
あなたはとにかくUTCになりますので、

$date = new DateTime('@1306123200', new DateTimeZone('Europe/Madrid')); 

が、誤解を招くこと

注意! (そして、はい、それはコンストラクタのドキュメントで非常に明確に指定されていますので、注意してください)

ありがとう@hakre ありがとうございます!

+0

必要なものがmysql形式の日付(あなたのタイムゾーンに相当)であれば、次のように直接使うこともできます:$ mysql_time = date( "Y-m-d H:i:s"、$ ts_time); – mika

関連する問題