解析 UTC 日期,输出本地日期时间

Parse a UTC date, output local datetime

我已经阅读了How to get local time in php?和类似的问题,但在这里我想做相反的事情:

对于给定的 UTC 日期时间(例如 2021-03-31 23:45:00),如何输出本地时区的日期?

$dt = new DateTime("2021-03-31 23:45:00");  // parse the UTC datetime
echo $dt->format('m/d/Y, H:i:s');           

在Europe/Paris时区,它应该输出2021-04-01 01:45:00,但这里仍然输出2021-03-31 23:45:00。如何解决这个问题?

我也试过 strtotime 也有类似的结果;我也试过:

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');

没有成功。

您需要更改日期的时区(使用DateTime::setTimeZone()),而不是默认时区:

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');

输出:

04/01/2021, 01:46:14

更改默认时区会影响 new DateTime(),而不是 format() 结果。

这也可以通过 date 和 strtotime 轻松解决:

//The following line is only required if the server has a different time zone.
//date_default_timezone_set('Europe/Paris');

$utcDate = "2021-03-31 23:45:00";

echo date('m/d/Y, H:i:s',strtotime($utcDate.' UTC'));

输出:

04/01/2021, 01:45:00