当单个数字足够时,为什么mktime()不能使用两位数?

时间:2013-12-06 22:56:12

标签: php mktime

我对PHP很新,所以请原谅我这是一个愚蠢的问题。

我试图在我的网站上运行mktime(),因为我仍然熟悉语法,运行如下:

  

回音日期('h:i:s M-d-Y',mktime(12,00,00,00,208,2013));

我很惊讶地发现了这个:

  

12:00:00 Nov-30-2013

当我期待的是这样的时候:

  

12:00:00 Dec-08-2013

我最终发现“08”是问题,应该只是“8”。

鉴于mktime()能够进行一些动态修正和假设(例如example #2),为什么不简单地将“08”改为“8”?这对我来说特别困惑,因为它处理双0就好了。这是一个功能,一个错误,还是仅仅是语言的特质?

另外,为什么它在11月30日“更正”而不是其他日期呢?鉴于上面的例子,我预计1月1日。

3 个答案:

答案 0 :(得分:4)

这不是mktime的问题,而是PHP如何解释文字数字。

在PHP中,当文字数字以零为前缀时,例如0108将其解释为八进制,请参阅http://www.php.net/manual/en/language.types.integer.php,类似于0x前缀如何表示十六进制文字数。

请注意,08实际上是无效的,因为八进制数字的数字为0-7,PHP的文档说明“如果以八进制整数(即8或9)给出无效数字,则其余部分为号码被忽略。“,08变为0,因此它会截至11月30日。

答案 1 :(得分:3)

0之类的前导08开头的数字是八进制表示法;除了08是无效的八进制,因此它被视为值0。

由于第12个月没有第0天,从12月1日开始需要1个月才能给出上一个月的最后一天,即11月30日

答案 2 :(得分:2)

前导零的数字评估为八进制数(基数为8): http://www.php.net/manual/en/language.types.integer.php