2012-05-20 106 views
1

另一個簡單的問題。我發現這個代碼真的很酷片段:PHP中的日期函數

$date_str = "Jan 14th 2011"; 
$date = date_parse_from_format('M jS Y', $date_str); 
echo $date->format('Y-m-d'); 

但是,當我在我的電腦上運行它,它說致命錯誤:調用一個成員函數的格式()在一個非對象行3

的代碼是從這裏取得的Converting date string to date,所以我認爲它很好,但它看起來像是引用了一個不存在的對象。

我一直在尋找http://php.net/manual/en/function.date-parse-from-format.phphttp://www.w3schools.com/php/php_ref_date.asp其中許多人,但我還沒有找到任何線索。

我的問題是這個代碼應該作爲一個獨立的代碼片。如果是這樣,爲什麼它不適合我?否則,我應該如何讓它按預期工作。

+1

您使用的是哪個版本的PHP?該功能適用​​於PHP> = 5.3.0,而大多數共享託管公司仍然默認提供PHP 4。檢查'phpinfo()'。 – jedwards

+0

@jedwards再次感謝你。在這種情況下,我正在使用PHP版本5.3.9。 – Brett

回答

3
date_parse_from_format(); 

返回關聯數組和您試圖訪問一個非對象的類方法。

如果你想利用PHP的內置DateTime類。那麼更多信息http://in2.php.net/manual/en/datetime.format.php

+0

工作。只是一個簡單的問題,我有一個簡單的方法來檢查它將轉換爲日期而不會創建異常,如果它失敗? – Brett

+1

如果您希望跳過異常部分,然後使用try catch語句將其綁定,那麼異常將被拋出。例如'嘗試{/ ***你的日期時間代碼在這裏*** /}趕上(例外$ e){/ ***做任何與捕獲異常,讓它爲空將不會顯示你的豁免*** /}說過這些,檢查錯誤或警告總是很好的。我不會推薦這個,或者你可以在catch語句中將錯誤記錄到文件中,而不是將其顯示回給用戶。 –

+0

太好了。謝謝。 – Brett

2

date_parse_from_format返回一個數組,而不是DateTime對象。你想要的是

$date = date_create_from_format('M jS Y', $date_str); 
      ^^^^^^---note the change 
echo date('Y-m-d', $date); 
+0

是的,非常感謝@Marc :-) – Brett