因爲它們都指向同一個對象。所以當你在一個時區改變時區時,你正在改變它們。
$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()
自動默認是不必要到當前日期和時間..
根據[PHP文檔](http://www.php.net/manual/en/timezones.others.php),你不應該使用區域「PST」或「美東時間。它們僅出於向後兼容性的原因。您應該改用[支持的時區](http://www.php.net/manual/en/timezones.php),特別是「America/Los_Angeles」或「America/New_York」。 –