我尝试使用以下代码执行此操作:
$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');
但他们都在同一时间输出。为什么他们没有输出正确的时间?
答案 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()
时,它会自动默认为当前日期和时间..