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



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

$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()它会自动默认为当前日期和时间时。

最新更新