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"
}