2012-03-05 6 views
0

PHPを使用して、2つのタイムゾーンの秒数の差を計算しようとしています。私はかなりサンプルコードをhttp://www.php.net/manual/en/datetimezone.getoffset.phpのPHPドキュメントから直接コピーしていますが、私は間違った答え(または少なくとも直感的に正しい答えではありません)を得ています。私のコードは次のとおりPHPのDateTimeZone :: getOffset関数の出力を解釈する

$my_timezone = new DateTimeZone("America/New_York"); 
$server_timezone = new DateTimeZone("America/Denver"); 

$my_date = new DateTime("now", $my_timezone); 
$server_date = new DateTime("now", $server_timezone); 

var_dump($my_timezone->getOffset($server_date)); 

出力int -18000ある、又は-6時間、それは夏時間に応じて、+ 2または+3であるべきです。言うまでもなく、PHPドキュメンテーションで与えられた例は、実際に1時間離れていても、台北と東京の時間差は7時間です。誰かが何が起こっているのかを説明してください。そして、2つのタイムゾーンの間に正しい時間差を見つけるにはどうしたらいいですか?どうもありがとうございました。

P.S.私が失われている限り、ラインの目的は何ですか?$my_date = new DateTime("now", $my_timezone);$my_dateはコード内で再び参照されることはありません。

答えて

2

$my_timezone->getOffset($server_date)は、オフセットルール$my_timezoneを使用して、GMTからのオフセットを$server_dateに戻します。だからあなたが期待していない結果を得ているのです。

getOffset()を使用して2つのタイムゾーンの差を取得する場合は、両方のタイムゾーンでgetOffset()を呼び出して、もう一方のタイムゾーンを減算する必要があります。

<?php 
$my_timezone = new DateTimeZone("America/New_York"); 
$server_timezone = new DateTimeZone("America/Denver"); 

$my_date = new DateTime("now", $my_timezone); 
$server_date = new DateTime("now", $server_timezone); 

$my_offset = $my_timezone->getOffset($my_date); 
$server_offset = $server_timezone->getOffset($server_date); 

$diff = $my_offset - $server_offset;  
var_dump($diff); 

上記の出力7200​​は、2時間単位の秒数で、タイムゾーンの差です。

+0

+1私は混乱させてもらうために、2つの変数セットを宣言していますが、それぞれの一部のみを使用しています。 –

関連する問題