2014-05-15 66 views
2

我的數據庫有日期的條目是這樣的: 8月29日20:00 PMcreateFromFormat不返回正確的小時

echo $datetest; 
//prints 29th August 20:00 PM 

$myDateTime = DateTime::createFromFormat('jS F H:i A', $datetest) 
$startHoursString = $myDateTime->format('H'); 

echo $startHoursString; 
// prints 08 instead of 20 

我期待的是$ startHoursString將是20而不是8

任何人都可以闡明瞭這一點或解決方法?

+0

你試過'hh','h','HH'等嗎? –

+0

首先。改變你的日期列類型爲'datetime'並插入到你的數據庫中的那一列(我假設MySQL)與'now()' – ThisBoyPerforms

+0

是的,如果我嘗試 $ startHoursString = $ myDateTime-> format('HH'); 它打印0808而不是20. – trevcl

回答

2

這是骯髒的黑客,但它應該工作,如果你確定日期是在這個AM/PM格式,你必須最後3個字符從字符串(上午或下午加空格)刪除:

$myDateTime = DateTime::createFromFormat('jS F H:i', substr($datetest, 0, -3));

小提琴here

此外,請記住,使用AM/PM有效期長達12個小時,20:00 AM/PM是無效格式。

+0

請參閱我的答案的編輯。 – bodi0

+0

這是一個完美的答案。似乎工作,所以想法是砍掉AM/PM然後轉換它。非常感謝! – trevcl

+0

同時檢查'createFromFormat()'函數,我們現在不需要'A'修飾符,**只有**'jS F H:我' – bodi0