我正在尝试将午夜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:00
和12am
,但都没有效果。我尝试使用UTC
代替GMT
作为基本DateTimeZone,但同样没有区别。
答案 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);