2012-02-10 78 views
3
$t = DateTime::createFromFormat('Gi', '900'); 
$time_str = $t->format('gi a'); 
echo $time_str; //outputs 600 pm instead of 9am. Why? and How do I get 9am? 

我不知道我要去的地方錯了..我下面什麼在這裏給出的日期格式方面: http://php.net/manual/en/function.date.phpPHP的日期格式不工作

謝謝!

+2

無想法爲什麼,但這個工程>'DateTime :: createFromFormat('G我','9 00');''''我猜它是因爲時間必須以某種方式分開 – ManseUK 2012-02-10 16:33:41

回答

2

您鏈接的文檔是date()函數。 DateTime::createFromFormat不一樣(儘管格式字符串幾乎相同)。

我希望格式解析在識別小時和分鐘組件之間的差異時遇到了問題。

如果你用空格分開他們,你會得到期望的結果:

$t = DateTime::createFromFormat('G i', '9 00'); 
$time_str = $t->format('gi a'); 
echo $time_str; 
// Output is 900 am 

編輯:

無力爲PHP解析格式字符串像Giknown bug。解析器G不知道是否讀取990,而在後一種情況下90太高。

+0

啊謝謝!這有幫助!事情是,爲了快速計算時間(並且因爲我需要將它們用作數組索引),我將它們存儲爲數字[0到2359]。所以將它們轉換爲am/pm打印的最佳方法是將它們分爲小時和分鐘,減去12等等? – crazyphoton 2012-02-11 00:39:33

+0

如果使用前導零填充時間字符串,它似乎可以正確解析。 '0900' = 900 am然而,當使用am/pm時,我會強烈考慮在輸出時間的小時和分鐘組件之間放置冒號,因爲它是標準格式。 – JYelton 2012-02-13 16:03:06

+0

是的,那是真的。但01000失敗。這是更簡單的做手動:) – crazyphoton 2012-02-14 07:10:17

2

正如我在我的評論說,這個工程:

$t = DateTime::createFromFormat('G i', '9 00'); 
$time_str = $t->format('gi a'); 
echo $time_str.PHP_EOL; 

這裏寫下找不到任何 - 但懷疑的時候需要分開......無論是空間或結腸或別的東西

+0

這非常合理。好答案! ;) – 2012-02-10 16:38:52

+0

謝謝!我接受了其他答案,因爲鏈接到bug :) – crazyphoton 2012-02-11 00:39:56