2013-07-12 46 views
0

可以說我已經得到了我的Unix時間戳1373623247.現在我明白時間戳是從X開始的秒數。我遇到的問題是它的格式。使用時區格式化Unix時間戳?

我使用的服務器託管在德國,但我在英國,所以輸出是12-07-13 12:01:01,實際上它只有11:01:01在這裏。

我使用的代碼如下:

$date = 1373623247; 
echo date("j-m-y h:i:s",$date); 

我所做的是使用date_create和時區,如下所示:

$date1 = date("j-m-y h:i:s",$date); 
$dateobj = date_create("$date1", timezone_open('Europe/London')); 
echo date_format($dateobj,"j-m-y h:i:s") . "\n"; 

這個問題我現在是,它實際上調整的日期到明天,並沒有改變時間!

+0

使用[date_default_timezone_set](http://php.net/manual/en/function.date-default-timezone-set.php)設置您的時區。 – Rikesh

+0

明天你沒有得到。 「12-07-13」被解析爲「2012-07-13」。 –

回答

2

你並不需要在所有涉及date

$date = 1373623247; 
$dateobj = date_create_from_format("U", $date); 
date_timezone_set($dateobj, timezone_open('Europe/London')); 
echo date_format($dateobj,"j-m-y h:i:s") . "\n"; 

此代碼的時間戳使用Uformat specifier直接轉換爲DateTime實例。由於您不需要擔心服務器的默認時區,因此無法使用date來縮短和更清晰。

專業提示:datestrtotime得到很多的覆蓋面,並在某些情況下非常方便,但DateTime可以自己做所有事情,恕我直言,結果代碼更易於維護。

+0

謝謝,這工作很好。現在只是關於格林威治標準時間和英國夏令時的問題... – K20GH

+0

@ K20GH:我剛剛意識到這一點,並編輯了反思。正確的做法是解析時間戳並*然後*斷言您希望它被視爲倫敦當地時間。 – Jon

+0

工作正常!謝謝! – K20GH