Php 为什么';t mktime()在一位数字足够时使用两位数字?

Php 为什么';t mktime()在一位数字足够时使用两位数字?,php,mktime,Php,Mktime,我对PHP相当陌生,所以如果这是一个愚蠢的问题,请原谅我 我试着在我的站点上运行mktime(),因为我仍然熟悉语法,所以运行了如下内容: 回音日期('h:i:s M-d-Y',mktime(12,00,00,12,08,2013)) 令我惊讶的是,我发现: 2013年11月30日12:00:00 我所期待的是: 2013年12月8日12:00:00 我最终发现“08”是个问题,应该是“8” 既然mktime()能够进行一些即时更正和假设(例如),为什么它不简单地将“08”更正为“8”?这让我特

我对PHP相当陌生,所以如果这是一个愚蠢的问题,请原谅我

我试着在我的站点上运行mktime(),因为我仍然熟悉语法,所以运行了如下内容:

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

令我惊讶的是,我发现:

2013年11月30日12:00:00

我所期待的是:

2013年12月8日12:00:00

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

既然mktime()能够进行一些即时更正和假设(例如),为什么它不简单地将“08”更正为“8”?这让我特别困惑,因为它可以处理双0。这是一个特性,一个bug,还是仅仅是语言的一个特性


还有,为什么它“正确”到11月30日而不是其他日期?考虑到上面的例子,我希望是1月1日。

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

在PHP中,当文字数字的前缀为零时,例如
01
08
将其解释为八进制,请参见类似于
0x
前缀表示十六进制文字数字的方式


请注意,
08
实际上是无效的,因为八进制数的数字是0-7,PHP的文档说明“如果一个无效数字是以八进制整数(即8或9)给出的,则该数字的其余部分将被忽略。”,因此
08
变为
0
,这就是为什么它会突然出现在11月30日。

0
开头的数字,比如
08
是八进制符号;除非
08
是无效的八进制,因此它被视为值0


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

前导零的数字计算为八进制数(基数8):