2015-04-04 79 views
2

問題很簡單,但不知道爲什麼事情不是以一種簡單的方式工作。獲取PHP的當前日期時間爲時空

我想擁有特定時區的日期時間。我的服務器的時區爲America/Chicago,但我想獲取不同時區的當前日期時間。

  1. 我不想date_default_timezone_set,因爲它會更改所有日期時間函數的時區。
  2. 我試着$now = new DateTime(null, new DateTimeZone('Europe/Stockholm'));與不同的時區值,但都返回相同的值。

考慮下面的代碼

$current_time = date('Y-m-d H:i:s'); 
echo "The current server time is: " . $current_time . "\r\n"; 

$now = new DateTime(null, new DateTimeZone('America/New_York')); 
echo "America/New_York = ". $now->getTimestamp() . "\r\n"; 

$now = new DateTime(null, new DateTimeZone('Europe/Stockholm')); 
echo "Europe/Stockholm = ". $now->getTimestamp() . "\r\n"; 

$now = new DateTime(null, new DateTimeZone('Asia/Muscat')); 
echo "Asia/Muscat = ".$now->getTimestamp() . "\r\n"; 

$current_time = date('Y-m-d H:i:s'); 
echo "The current server time is: " . $current_time . "\r\n"; 

上面的代碼產生以下輸出

The current server time is: 2015-04-04 17:06:01 
America/New_York = 1428185161 
Europe/Stockholm = 1428185161 
Asia/Muscat = 1428185161 
The current server time is: 2015-04-04 17:06:01 

而且所有三個值是一樣的,意味着new DateTimeZone(XYZ)沒有工作。預期/要求的輸出應回顯那些特定時區的當前時間。

如果我缺少任何東西,請指教。

回答

4

Unix時間戳總是使用UTC,因此總是相同的。嘗試使用c格式化看到的差異:

$current_time = date('Y-m-d H:i:s'); 
echo "The current server time is: " . $current_time . "\r\n"; 

$now = new DateTime(null, new DateTimeZone('America/New_York')); 
echo "America/New_York = ". $now->format('c') . "\r\n"; 

$now = new DateTime(null, new DateTimeZone('Europe/Stockholm')); 
echo "Europe/Stockholm = ". $now->format('c') . "\r\n"; 

$now = new DateTime(null, new DateTimeZone('Asia/Muscat')); 
echo "Asia/Muscat = ".$now->format('c') . "\r\n"; 

$current_time = date('Y-m-d H:i:s'); 
echo "The current server time is: " . $current_time . "\r\n"; 

The current server time is: 2015-04-04 22:26:56 
America/New_York = 2015-04-04T18:26:56-04:00 
Europe/Stockholm = 2015-04-05T00:26:56+02:00 
Asia/Muscat = 2015-04-05T02:26:56+04:00 
The current server time is: 2015-04-04 22:26:56 

Demo

+0

所以唯一的區別是使用)'$現在 - >格式()''而不是$現在 - > getTimestamp('的。我試着用'Y-m-d H:i:s'格式代替'c',現在一切看起來都不錯。標記接受的答案。謝謝親愛的。 – Ans 2015-04-04 22:35:42