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