2014-02-11 25 views
0

我試圖顯示GMT,PST和EST當前的時間做到這一點使用下面的代碼:試圖使用DateTime類

$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

根據[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」。 –

回答

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()自動默認是不必要到當前日期和時間..