从DateTime对象中,我有兴趣在不同的TimeZones中获取时间。 正如DateTime::setTimezone doc中所解释的那样,当从字符串创建DateTime对象时,这很有效:
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:sP') . "\n";
echo $date->getTimestamp() . "\n";
上面的例子将输出:
2000-01-01 00:00:00 + 12:00
2000-01-01 01:45:00 + 13:45
1999-12-31 12:00:00 + 00:00
946641600个
现在是有趣的部分:如果我们拿起时间戳,并按照手动说明启动我们的DateTime对象。
$date2 = new DateTime('@946641600');
$date2->setTimezone(new DateTimeZone('Pacific/Nauru'));
echo $date2->format('Y-m-d H:i:sP') . "\n";
$date2->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date2->format('Y-m-d H:i:sP') . "\n";
$date2->setTimezone(new DateTimeZone('UTC'));
echo $date2->format('Y-m-d H:i:sP') . "\n";
echo $date2->getTimestamp() . "\n";
在这里我们得到:// [编辑]哼哼...抱歉,这个输出是错误的...
1999-12-31 12:00:00 + 00:00
1999-12-31 12:00:00 + 00:00
1999-12-31 12:00:00 + 00:00
946641600个
UTC永远!我们不能再改变时区了!?!
是PHP还是我?版本5.3.15
答案 0 :(得分:5)
好的,所以我自己也生气了。当然,我是一个错误的人......
为了做到这一点,我只需要获取文档here和here中相关的位。
手册说:
// Using a UNIX timestamp. Notice the result is in the UTC time zone.
$date = new DateTime('@946684800');
echo $date->format('Y-m-d H:i:sP') . "\n";
事实上,您可以使用setTimezone在您的时区再次获得时间(如果您的系统设置方式可以预期!):
$timezone = new DateTimeZone('Europe/Madrid');
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
请注意
$date = new DateTime('@1306123200', new DateTimeZone('Europe/Madrid'));
会产生误导,因为无论如何你都会在UTC中! (是的,它在构造函数的doc中非常清楚地指定。所以要小心;)
谢谢@hakre 谢谢大家!
答案 1 :(得分:4)
只是你。就PHP来说,它一切都很好,花花公子,PHP手册很好地涵盖了这个:http://www.php.net/manual/en/datetime.construct.php