2012-02-10 41 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