从 DateTime 对象中,我对获取不同时区的时间感兴趣。正如DateTime::setTimezone文档中所解释的,当从字符串创建 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";
在这里我们得到: // [edit] 嗯...对不起,这个输出是错误的...
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