我对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日。
答案 0 :(得分:4)
这不是mktime
的问题,而是PHP如何解释文字数字。
在PHP中,当文字数字以零为前缀时,例如01
或08
将其解释为八进制,请参阅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