PHP

PHP: DateTimeZoneを使わずにDateTimeのタイムゾーンを指定する方法

PHPではnew DateTime()の第二引数にDateTimeZoneオブジェクトを渡すとタイムゾーンを指定することができる:

new \DateTime('2019-01-01 00:00:00', new \DateTimeZone('Asia/Tokyo'));

実は、第一引数にタイムゾーン識別子を入れると、上と同じことができる:

new \DateTime('2019-01-01 00:00:00 Asia/Tokyo');

念の為同じかどうかを確認してみよう:

date_default_timezone_set('UTC');

$date1 = new \DateTime('2019-01-01 00:00:00', new \DateTimeZone('Asia/Tokyo'));
$date2 = new \DateTime('2019-01-01 00:00:00 Asia/Tokyo');
assert(
$date1->getTimestamp() === $date2->getTimestamp() &&
$date1->getTimezone()->getName() === $date2->getTimezone()->getName()
);

現在時刻がタイムゾーン指定でほしいときは、タイムゾーン識別子だけ渡せばいい:

var_dump(new \DateTime('Asia/Tokyo'));

出力結果:

object(DateTime)#3 (3) {

["date"]=>
string(26) "2019-06-06 14:45:00.377395"
["timezone_type"]=>
int(3)
["timezone"]=>
string(10) "Asia/Tokyo"
}