PHP:将时间转换为设备时区

时间:2014-05-20 20:11:55

标签: php mysql date datetime

我有一个数据库表,我存储了一个日期NOW(),时间比我晚了两个小时。我的时区是UTC + 2,我的phpMyAdmin数据库正在使用' Africa / Accra'或者' Artic / Reykjavik' - GMT。

如果我的数据库使用默认值,这很好,但是当我尝试将时间转换为用户时区时,没有任何反应。

这就是我的尝试:

date_default_timezone_set("Africa/Accra"); // Also tried with GMT

$timezone = 'Europe/Berlin';
$feed_time = '2014-05-20 19:27:52';

$schedule_date = new DateTime($feed_time, new DateTimeZone($timezone) );
$newdate = date('Y-m-d H:i:s',strtotime("$feed_time UTC"));

echo $newdate;

这个回声:2014-05-20 19:27:52,所以没有区别。

如何转换时间,使其与设备默认时区相同?

1 个答案:

答案 0 :(得分:3)

您未使用$schedule_date。您使用新值创建它但从未实际使用它。您仍然使用旧数据。

$schedule_date = new DateTime($feed_time, new DateTimeZone($timezone) );
echo $schedule_date->format('Y-m-d H:i:s');

此外,您需要先设置日期/时间,然后再更改时区。这是因为您的日期/时间是UTC,因此您需要从那里开始。然后你可以相应地改变时区。

$original_date = new DateTime('2014-05-20 19:27:52', new DateTimeZone('UTC') );
$original_date->setTimeZone(new DateTimeZone('Africa/Accra'));
echo $original_date->format('Y-m-d H:i:s');

$schedule_date = new DateTime('2014-05-20 19:27:52', new DateTimeZone('UTC') );
$schedule_date->setTimeZone(new DateTimeZone('Europe/Berlin'));
echo $schedule_date->format('Y-m-d H:i:s');

输出:

2014-05-20 19:27:52
2014-05-20 21:27:52

Demo