代码之家  ›  专栏  ›  技术社区  ›  Björn C

为什么在循环使用月份名称时会有两个三月?

php
  •  4
  • Björn C  · 技术社区  · 7 年前

    当运行以下代码时,为什么我会得到3月2日而不是2月,然后是3月?

    <?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 回复  |  直到 7 年前
        1
  •  7
  •   Don't Panic    7 年前

    这是因为:

    ( from the mktime function reference )

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

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

    如果你增加一天 麦克泰姆 你会得到你期望的结果。

    $monthName = strftime('%B', mktime(0, 0, 0, $i, 1));
    
    推荐文章