2015-05-27 77 views
4

我使用Envato API來驗證在其網站上進行的購買,並且作爲購買的API查詢的一部分輸出的日期/時間就像這樣:在PHP中轉換日期格式(但是這是什麼格式?)

Wed May 20 06:37:57 +1000 2015 

首先,什麼格式這是(有一個名字爲它,以及在PHP日期/時間格式條款?),其次我怎麼能轉換成不同的格式呢?

當我使用strtotime()功能,然後date()如下,輸出似乎是錯誤的幾個小時。這可能是因爲Envato(澳大利亞)和我(英格蘭)之間的時區不同,還是我錯過了什麼?

$old = strtotime("Wed May 20 06:37:57 +1000 2015"); 
echo date('Y-m-d H:i:s', $old); 

以上輸出結果如下:2015-05-19 22:37:57

任何幫助將不勝感激,謝謝!

+2

我不知道,但我覺得你可以直接從日期格式創建一個新的日期對象。然後打印它的格式就像你想..也許這樣? http://sandbox.onlinephpfunctions.com/code/0a1d2686d74801eb4422f5845277c3ee1d444925(輸出:2015-05-20 06:37:57)。無論如何,提出問題+1。請注意,如果您更改時區,您將針對每一個日期執行此操作。如果您創建日期時間對象,它將在該日期專門適用。 – briosheje

+0

@briosheje - 太好了,謝謝。如果我沒有指定時區(就像我原來的文章),這是否意味着PHP會自動將它從澳大利亞時間轉換爲英國時間?我很困惑,原來的代碼是從5月20日到5月19日改變它的,而時間(小時)也是錯誤的。 –

+1

你應該聽取briosheje的建議 - 使用'DateTime :: createFromFormat(...)',並明確地指定輸入格式,而不是交叉手指並希望'strtotime'能夠形成格式。作爲獎勵,您將得到一個完整的,可識別時區的日期對象,而不僅僅是一個時間戳。 – DCoder

回答

3

這應該工作:

$date="Wed May 20 06:37:57 +1000 2015"; 
$datetime = DateTime::createFromFormat('D F d H:i:s O Y',$date); 
echo $datetime->format('Y-m-d H:i:s'); 

,如果你要轉換,它給英國時區:

$datetime->setTimezone(new DateTimezone('Europe/London')); 
echo "Queen's datetime: ".$datetime->format('Y-m-d H:i:s') 
+0

偉大的東西,簡單和重點 - 謝謝! –

+0

歡迎您;) – n00dl3

+0

因此,我們不必告訴PHP,原始日期/時間在ACT中? –

2

試試這個

date_default_timezone_set('Australia/ACT'); 
$old = strtotime("Wed May 20 06:37:57 +1000 2015"); 
echo date('Y-m-d H:i:s', $old); 
+0

謝謝,澄清,這保留了時區,以便這裏的一切都在澳大利亞時間?如果我想將其轉換爲格林尼治標準時間/英國時間,我簡單地忽略該行(這是以前發生的事情)? –

+0

如果你想轉換爲GMT/UK時間更改timezone_set。所以時間將轉換爲英國時間。不錯的選擇是將數據庫日期時間和時區插入或爲所有設置設置一個時區默認值。 –