我已经阅读了如何在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');
在欧洲/巴黎时区,它应该输出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');
输出:
2021年1月4日01:46:14
更改默认时区会影响new DateTime()
,而不是format()
结果。
这也可以通过日期和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