难以在时区之间转换时间

时间:2014-06-06 16:04:14

标签: php datetime timezone

我正在尝试将午夜GMT转换为不同的时区。我们有一个从午夜到午夜的每日测验,我希望能够动态地向人们显示不同的时区,以便它随着夏令时自动更改。

关注this answer我想出了这段代码

$dateFormat = 'h:i a';
$date = new DateTime(gmdate('Y-m-d'), new DateTimeZone('GMT'));
$date->setTimezone(new DateTimeZone('Europe/London'));
$tzWesternEurope = date($dateFormat);
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
$tzCentralEurope = date($dateFormat);
$date->setTimezone(new DateTimeZone('Europe/Athens'));
$tzEasternEurope = date($dateFormat);
// ... And so for 17 different time zones around the world.

然而它不起作用。从这个eval.in示例中可以看出,所有时区都显示相同,并显示错误的时间。我做错了什么?

我尝试将gmdate('Y-m-d')更改为时间00:0012am,但都没有效果。我尝试使用UTC代替GMT作为基本DateTimeZone,但同样没有区别。

1 个答案:

答案 0 :(得分:2)

您实际上从未使用$date。你不断改变时区,但是你忽略了它,直接进入完全不相关的date()函数。

您需要使用DateTime::format()以所需的格式和时区输出日期。

$dateFormat = 'h:i a';
$date = new DateTime(null, new DateTimeZone('GMT'));
$date->setTimezone(new DateTimeZone('Europe/London'));
$tzWesternEurope = $date->format($dateFormat);
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
$tzCentralEurope = $date->format($dateFormat);