首页 > 解决方案 > 为什么循环出月份名称时会得到两个 March?

问题描述

运行以下代码时,为什么我得到两个 March 而不是 February 然后是 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";

  }
?>

输出:

01:January
02:March
03:March
04:April
05:May
06:June
07:July
08:August
09:September
10:October
11:November
12:December

标签: php

解决方案


正因为如此:

来自mktime函数参考

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

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

如果你增加一天,mktime你会得到你期望的结果。

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

推荐阅读