找出月份名称时,为什么会得到两个三月?

时间:2019-01-30 18:01:08

标签: php

为什么在运行以下代码时我得到两个三月而不是二月,然后是三月?

<?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

1 个答案:

答案 0 :(得分:7)

因为这个原因:

from the mktime function reference

  

可以从右到左按顺序省略参数;省略的所有参数将根据本地日期和时间设置为当前值。

如果当前日期大于指定月份的最后一天,则多余的日期会将得到的时间戳记延长到下个月。在这种情况下,今天是30日,因此2月30日变为3月2日。

如果将一天添加到mktime,您将获得期望的结果。

$monthName = strftime('%B', mktime(0, 0, 0, $i, 1));