I have already read How to get local time in php? and similar questions, but here I want to do the contrary:
With a given datetime in UTC (e.g. 2021-03-31 23:45:00
), how to output the date in local timezone?
$dt = new DateTime("2021-03-31 23:45:00"); // parse the UTC datetime echo $dt->format('m/d/Y, H:i:s');
In Europe/Paris timezone, it should output 2021-04-01 01:45:00
, but here it sill outputs 2021-03-31 23:45:00
. How to fix this?
I also tried with strtotime
with a similar result; I also tried with:
date_default_timezone_set('UTC'); $dt = new DateTime("2021-03-31 23:46:14"); date_default_timezone_set('Europe/Paris'); echo $dt->format('m/d/Y, H:i:s');
without success.
Advertisement
Answer
You need to change the timezone of the date (using DateTime::setTimeZone()
), not the default timezone:
date_default_timezone_set('UTC'); $dt = new DateTime("2021-03-31 23:46:14"); $dt->setTimeZone(new DateTimeZone("Europe/paris")); // change date timezone echo $dt->format('m/d/Y, H:i:s');
Output:
04/01/2021, 01:46:14
Changing the default timezone affects the new DateTime()
, not the format()
result.