2012-10-01 39 views
2

使用PHP 5.3壞的答案,給出的字符串Sat, 20 Oct 2012 05:00:00 GMT不一致的數據和使用的strtotime和日期

print $start; 
$start = strtotime($start); 
var_dump($start); 
$hour = date('H:i A', $start); 
die($hour); 

,在我的程序的代碼片斷返回此:

Sat, 20 Oct 2012 05:00:00 GMT 
int(1350709200) 
00:00 AM 

var_dump是正確的,但日期返回一個不好的答案。

另請注意,這改變這種片斷閱讀:

print $start; 
$start = strtotime($start); 
die($start); 
$hour = date('H:i A', $start); 
die($hour); 

回報:

Sat, 20 Oct 2012 05:00:00 GMT 

第一模返回一個空字符串,空,我只能假設實際上是爲布爾值FALSE。

所以我實際上有兩個不同的問題,在這裏。相同的答案返回兩個不同的事情取決於我是否var_dump或死亡,第二個是該日期似乎收到假的答案,而不是var_dump答案。

幫助?

+2

我會說使用'die()'調試一個變量是不是要走的路。相反,如果你想調試變量,然後殺死程序,使用'var_dump($ foo);模具();'。 – Zar

+2

此外,我想你會意識到'die()'結束你的腳本;這使得腳本只能在第二個例子中直到第3行。任何背後的東西永遠不會被執行。 – Zar

+2

可能與時區有關。你的系統設置了什麼時區,你的php.ini設置了什麼時區? – wgcrouch

回答

1

如你所說,你正在設定美國/芝加哥的時區。當你調用strtotime時,你明確地在字符串中指定了GMT。然後,當您將時間戳放入日期時,它將採用時間戳並在GMT之前5小時在美國/芝加哥給您時間,這就是爲什麼它是00:00 AM。

您正在使用5.3。我建議使用DateTime對象而不是strtotime()和date()。它更容易與時區等工作,而var_dumps是有用的。從用戶輸入或db值創建一個DateTime,然後在代碼中傳遞,而不是時間戳。

+0

我正在嘗試在AM/PM上使用24小時的時間。愚蠢的錯誤。 – Dramatological