php Date mktime()函数在月末显示不同的值吗?

时间:2013-07-31 07:44:50

标签: php date mktime

要在下拉列表中列出月份,请使用php函数

<select name="month" class="span3">
        <?php
            for($m = 1;$m <= 12; $m++){ 
                $month =  date("F", mktime(0, 0, 0, $m));?>
                <option  value="<?php echo $m; ?>"><?php echo $month; ?></option> 
        <?php } ?>
    </select>

当我今天(即31-07-2013)检查其显示月份时,工作正常

    <select class="span3" name="month">
       <option value="1">January</option>
       <option value="2">March</option>
       <option value="3">March</option>
       <option value="4">May</option>
       <option value="5">May</option>
       <option value="6">July</option>
       <option value="7">July</option>
       <option value="8">August</option>
       <option value="9">October</option>
       <option value="10">October</option>
       <option value="11">December</option>
       <option value="12">December</option>
    </select>

当我将日期格式检查为('Y-m-d')时显示该月份的第一个和最后一个日期,而不显示二月份显示2013-03-03。当我将mktime函数修改为mktime(0, 0, 0, $m,1,2013)时,结果与预期一样正确。当我在php中使用mktime()date()函数时,我需要寻找什么。

2 个答案:

答案 0 :(得分:5)

添加第5个参数来解决此问题。

$month =  date("F", mktime(0, 0, 0, $m, 1));

这是第31天,只有上述月份有31天。

为了澄清会发生什么,第5个参数的默认值是当天。你传递的数字高于那个月的天数,它会翻到下个月。

答案 1 :(得分:2)

您必须在day函数中传递第5个参数mktime

 for($m = 1; $m <= 12; $m++){ 
      $month =  date("F", mktime(0, 0, 0, $m, 1));
      echo $month;
 } 

小于1的日期(包括负值)参考上个月的日期。