为什么在循环出月份名称时会得到两个三月?

Bjö*_*n C 4 php

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

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

  }
?>
Run Code Online (Sandbox Code Playgroud)

输出:

01:January
02:March
03:March
04:April
05:May
06:June
07:July
08:August
09:September
10:October
11:November
12:December
Run Code Online (Sandbox Code Playgroud)

Don*_*nic 7

这是因为:

(来自mktime功能参考)

参数可以从右到左依次排除; 这样省略的任何参数将根据本地日期和时间设置为当前值.

如果当前日期大于指定月份的最后一天,则额外天数会将生成的时间戳延长到下个月.在这种情况下今天是30日,所以2月30日变成3月2日.

如果你添加一天,mktime你将得到你期望的结果.

$monthName = strftime('%B', mktime(0, 0, 0, $i, 1));
Run Code Online (Sandbox Code Playgroud)

  • 我会在你的回答中提到双重三月的具体原因是2月30日结束到3月份,并且除了在当月28日以上的天数之外这不可重现:) (2认同)