为什么在运行以下代码时我得到两个三月而不是二月,然后是三月?
<?php
for($i=1; $i<= 12; $i++){
//MONTH NAME
$monthName = strftime('%B', mktime(0, 0, 0, $i));
if($i <= 9){
$monthNr = "0".$i;
}
else{
$monthNr = $i;
}
echo $monthNr . ':' . ucfirst($monthName) ."\n";
}
?>
输出:
01:January
02:March
03:March
04:April
05:May
06:June
07:July
08:August
09:September
10:October
11:November
12:December
答案 0 :(得分:7)
因为这个原因:
(from the mktime
function reference)
可以从右到左按顺序省略参数;省略的所有参数将根据本地日期和时间设置为当前值。
如果当前日期大于指定月份的最后一天,则多余的日期会将得到的时间戳记延长到下个月。在这种情况下,今天是30日,因此2月30日变为3月2日。
如果将一天添加到mktime
,您将获得期望的结果。
$monthName = strftime('%B', mktime(0, 0, 0, $i, 1));