DateTime オブジェクトのタイムゾーンの設定
タイムゾーンを特に指定しない場合、 date_default_timezone_get() の値が使われる。
<?php $date = new DateTime; $tz = $date->getTimezone(); $tz->getName(); // Asia/Tokyo date_default_timezone_get(); // Asia/Tokyo $date->getTimestamp(); // 1410130800 $date->format('Y/m/d H:i:s'); // 2014/09/08 08:00:00
@ + UNIX タイムスタンプで初期化した場合
DateTime クラスのコンストラクタに、'@' + UNIX タイムスタンプ という文字列を指定した場合、そのオブジェクトのタイムゾーンは強制的に UTC となる。
<?php $date = new DateTime('@1410130800'); $tz = $date->getTimezone(); $tz->getName(); // +00:00 $date->getTimestamp(); // 1410130800 $date->format('Y/m/d H:i:s'); // 2014/09/07 23:00:00
一方 setTimestamp() でタイムスタンプを指定した場合は、そのオブジェクトが持っているタイムスタンプが受け継がれる。
<?php $date = new DateTime; $date->setTimestamp(1410130800); $tz = $date->getTimezone(); $tz->getName(); // Asia/Tokyo $date->getTimestamp(); // 1410130800 $date->format('Y/m/d H:i:s'); // 2014/09/08 08:00:00
ある地域の時刻を別の地域の時刻に変換する
変換元のタイムゾーンを指定してから時刻を表す文字列を解析し、変換先のタイムゾーンを指定して整形関数を使えばよい。
<?php $date = new DateTime('2014/09/08 08:00:00', new DateTimeZone('Europe/London')); $date->format('Y/m/d H:i:s'); // 2014/09/08 08:00:00 $date->setTimezone(new DateTimeZone('UTC')); $date->format('Y/m/d H:i:s'); // 2014/09/08 07:00:00 (夏時間のためロンドンの時刻は UTC より 1 時間進んでいる)