这是一个基本的概念验证脚本:
<?php
for($i = 1; $i < 13; $i++)
{
echo 'Using ' . $i . ' | ';
echo date('F', mktime(0,0,0,$i)) . " | ";
echo date('F', strtotime('2011-' . $i . '-01')) . "<br />";
}
我得到的输出是:
Using 1 | January | January
Using 2 | March | February
Using 3 | March | March
Using 4 | April | April
Using 5 | May | May
Using 6 | June | June
Using 7 | July | July
Using 8 | August | August
Using 9 | September | September
Using 10 | October | October
Using 11 | November | November
Using 12 | December | December
这让我很伤心,因为它刚刚停止显示二月,并开始显示三月。
答案 0 :(得分:10)
您错误地使用了mktime()
。
int mktime ([ int $hour = date("H")
[, int $minute = date("i")
[, int $second = date("s")
[, int $month = date("n")
[, int $day = date("j") <------------ here
[, int $year = date("Y") <------------ and here
[, int $is_dst = -1 ]]]]]]] )
如果您未指定$day
和$year
,则默认为今天。
今天是30日,2月份并不存在。
这将有效:
echo date('F', mktime(0,0,0,$i,1,2011)) . " | ";
答案 1 :(得分:3)
非常简单 - 你在本月的29日,30日或31日运行它。 mktime(0,0,0,2)
真的是mktime(0,0,0,2,date('j'),date('Y'))
,在今天的情况下会尝试创建2011年2月30日,也就是3月2日。
答案 2 :(得分:1)
参数可能会被排除在外 从右到左;因此,任何论据 省略将设置为当前 根据当地日期和价值 时间。
因此,它将第五个参数设置为当前日期(此处为30)。这意味着它增加了日期,因为30是2月份的无效日,并使其成为游行。
答案 3 :(得分:0)