尝试使用dateTime类以GMT,PST和EST显示当前时间

时间:2014-02-11 14:48:55

标签: php datetime timezone format

我尝试使用以下代码执行此操作:

$date = new DateTime('now');

$datePST = $date->setTimezone(new DateTimezone('PST'));

$dateEST = $date->setTimezone(new DateTimezone('EST'));

echo $date->format('H:i:s');
echo '<br />';
echo $EST = $dateEST->format('H:i:s');
echo '<br />';
echo $PST = $datePST->format('H:i:s');

但他们都在同一时间输出。为什么他们没有输出正确的时间?

1 个答案:

答案 0 :(得分:4)

因为它们都指向同一个对象。因此,当您更改时区时,您将为所有时区更改时区。

$date = new DateTime('now');
echo $date->format('H:i:s');
echo '<br />';
$date->setTimezone(new DateTimezone('PST'));
echo $date->format('H:i:s');
echo '<br />';
$date->setTimezone(new DateTimezone('EST'));
echo $date->format('H:i:s');

如果您想为每个时区分别设置变量,可以使用clone创建新对象:

$date = new DateTime('now');
$datePST = clone $date;
$datePST = $datePST->setTimezone(new DateTimezone('PST'));
$dateEST = clone $date;
$dateEST = $dateEST->setTimezone(new DateTimezone('EST'));

echo $date->format('H:i:s');
echo '<br />';
echo $EST = $dateEST->format('H:i:s');
echo '<br />';
echo $PST = $datePST->format('H:i:s');

如果你使用的是PHP 5.5,你也可以使用新的DateTimeImmutatable()类:

$date = new DateTimeImmutable('now');
$datePST = $date->setTimezone(new DateTimezone('PST'));
$dateEST = $date->setTimezone(new DateTimezone('EST'));

仅供参考,使用"now"是不必要的,因为当没有参数传递给DateTime()时,它会自动默认为当前日期和时间..