2012-08-01 129 views
0

我知道有幾種方法可以做到這一點,並且它們中的很多都使用DateTime類對象。在時區之間轉換

date_default_timezone_set("America/Phoenix"); 
$time=time(); 
$timezone='America/Chicago'; 
//$time and $timezone are then stored accordingly. 

然後我可以在我的時區獲取時間::我使用的存儲時間戳在數據庫

date_default_timezone_set("America/Phoenix"); 
echo date("m/d/Y g:i:s a",$time); 
//or if I want to display it to the user: 
date_default_timezone_set($timezone); 
echo date("m/d/Y g:i:s a",$time); 

我的問題是,是否適當操縱PHP的時區是這樣實現的意義當涉及到顯示日期和時間的地方,或者我應該使用其中一個打包對象來處理?

+0

如何開始使用[DateTime](http://php.net/datetime)? – zerkms 2012-08-01 20:26:59

+0

但是爲什麼?我應該有理由嗎? – 2012-08-01 20:27:30

+0

主要是因爲它爲你處理所有這些,所以你不必擔心它。 – KRyan 2012-08-01 20:28:09

回答

0

我會推薦使用內置的DateTime對象系列的php來處理這個問題。你可以這樣做時區轉換與它很容易:

// assuming the data coming from the database and it's in the America/Phoenix timezone 
$localtime = DateTime::createFromFormat('Y-m-d H:i:s', $db_date_string, new DateTimeZone('America/Phoenix')); 
$chicago_time = $localtime; 
$chicago_time->setTimeZone(new DateTimeZone('America/Chicago')); 
print $chicago_time->format('m/d/Y g:i:s a'); 

這使時區的操作在狹小範圍內的可能(一個日期時間只)。

此外,我會建議將數據庫數據存儲在一個時區,並在顯示/使用前將其轉換爲應用程序。這可以爲您節省大量的調試時間。 (它可以節省我至少:-P)