PHP mktime有时会返回错误的一天

时间:2014-01-08 21:18:51

标签: php wordpress mktime

我对mktime有一个简单的问题。我找到了以下代码:

echo date("Y-M-d", mktime(11, 45, 0, 01, 05, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 06, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 07, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 08, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 09, 2014)); echo ", ";

正在产生以下输出:

2014-Jan-05, 2014-Jan-06, 2014-Jan-07, 2013-Dec-31, 2013-Dec-31

日期功能就是为了让它更具可读性; mktime返回的时间戳本身是错误的。 唯一更改的事情是月份的日期,所以我不知道为什么在7到8天之间会出现不连续性,或者为什么8和9都会在同一天返回

我已经检查过小时,分钟和秒不会改变错误日期的结果,尽管它们确实会改变确切的时间戳。也就是说,上面的最后两行返回完全相同的时间戳(1388508300),但如果我更改小时,则时间戳的相对变化是预期的。

如果上下文很重要,这将在WordPress安装中的PHP 5.3中运行。

2 个答案:

答案 0 :(得分:8)

0..开头的整数文字是八进制表示法。八进制或以上的08不存在,你得到完全错误的值。第五天的 5,而不是05,依此类推。

答案 1 :(得分:5)

在你的日子(和几个月)之前摆脱领先的零

echo date("Y-M-d", mktime(11, 45, 0, 1, 5, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 1, 6, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 1, 7, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 1, 8, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 1, 9, 2014)); echo ", ";

See it in action