日本の時間でDateTimeオブジェクトを生成して、時差のある地域の現地時間を求める方法。
setTimeZone('EST') とかできそうだけど、わざわざDateTimeZoneオブジェクトを生成しないといけない。
//日本の現在の時刻とアメリカ東海岸の現地時刻の比較このあたりのマニュアル、分かり辛い。
$dt = new DateTime('now');
echo $dt->format('r'); //日本の時間(デフォルトはAsiz/Tokyoにしてあるので)
echo "<hr />\n";
$dt->setTimeZone(new DateTimeZone('America/New_York'));
echo $dt->format('r'); //アメリカ東海岸の時間
//向こうの現地時刻から日本の時刻に変換する場合
$dt = new DateTime('2008-12-09 23:22:44', new DateTimeZone('America/New_York'));
$dt->setTimeZone(new DateTimeZone('Asia/Tokyo'));
echo $dt->format('r');
また、夏時間も自動で考慮してくれるようだ。
for ($i = 1; $i < 13; $i++) {(結果)アメリカのサマータイムって3月から10月なんだ。
$dt = new DateTime("2008-$i-11 0:00");
echo '[日本] ' . $dt->format('Y-m-d H:i:s');
$dt->setTimezone(new DateTimeZone('America/New_York'));
echo ' [EST] ' . $dt->format('Y-m-d H:i:s');
echo ' [offset] ' . ($dt->getOffset() / 60 / 60) . '時間<br />';
}
[日本] 2008-01-11 00:00:00 [EST] 2008-01-10 10:00:00 [offset] -5時間
[日本] 2008-02-11 00:00:00 [EST] 2008-02-10 10:00:00 [offset] -5時間
[日本] 2008-03-11 00:00:00 [EST] 2008-03-10 11:00:00 [offset] -4時間
[日本] 2008-04-11 00:00:00 [EST] 2008-04-10 11:00:00 [offset] -4時間
[日本] 2008-05-11 00:00:00 [EST] 2008-05-10 11:00:00 [offset] -4時間
[日本] 2008-06-11 00:00:00 [EST] 2008-06-10 11:00:00 [offset] -4時間
[日本] 2008-07-11 00:00:00 [EST] 2008-07-10 11:00:00 [offset] -4時間
[日本] 2008-08-11 00:00:00 [EST] 2008-08-10 11:00:00 [offset] -4時間
[日本] 2008-09-11 00:00:00 [EST] 2008-09-10 11:00:00 [offset] -4時間
[日本] 2008-10-11 00:00:00 [EST] 2008-10-10 11:00:00 [offset] -4時間
[日本] 2008-11-11 00:00:00 [EST] 2008-11-10 10:00:00 [offset] -5時間
[日本] 2008-12-11 00:00:00 [EST] 2008-12-10 10:00:00 [offset] -5時間
タイムゾーンは"EST"とかの方が分かりやすいが、
ここに挙げられているタイムゾーン (UTC 以外のもの) は使用しないでください。 これらは過去のバージョンとの互換性のためにのみ残されています。とあるのでやめましょう。from PHP: Others - Manual
参考:
PHP: timezone_open - Manual
PHP: date_timezone_set - Manual