【问题标题】:php - Strange Behaviour In date() inside For Loopphp - For 循环内 date() 中的奇怪行为
【发布时间】:2014-02-04 11:03:53
【问题描述】:

我正在尝试在 for 循环中使用 date() 显示月份缩短名称。但它不想返回所有月份名称,而只是返回第一个月份名称 Jan

    for($d=1; $d<=12; $d++){

    if($d < 10) {
    $s = 0 . $d;
    echo date("M", $s) . '<br/>';
    }

    }

它会返回:

Jan
Jan
Jan
Jan
Jan
Jan
Jan
Jan
Jan
Jan

我不知道为什么变量$d 的值如果位于date() 函数内部,它不会增加。

有人能解释一下为什么会这样吗?

最好的问候

【问题讨论】:

  • 不需要在 $d 后面加上 '0'

标签: php date for-loop


【解决方案1】:
for($d=1; $d<=12; $d++){
$myDate = mktime(1,1,1,$d,1,2014);
echo date("M", $myDate) . '<br/>';

}

这已经过测试。输出:

一月 二月 三月 四月 可能 君 七月 八月 九月 十月 十一月 十二月

...

基本上,date() 函数的第二个参数需要是时间戳(以秒为单位)。

mktime() 函数将根据您提供的小时/分钟/秒/月/日/年创建时间戳。

http://uk1.php.net/mktime

【讨论】:

  • 这是最好的例子。为了更灵活,我更改了12014,所以它变成了mktime(date("H"),date("i"),date("s"),$d, date("j"),date('Y'));。感谢您将我指向该页面。
【解决方案2】:

Date() 需要时间戳作为第二个参数,而不是您提供的“月数”。因此,对于 Unix 纪元的 1-12 秒,月份将是一月。

【讨论】:

    【解决方案3】:

    如果您想从当前日期开始打印接下来的 12 个月,这将对您有所帮助。

    <?php
    for ($m=1; $m<=12; $m++) {
        $month = date('F', mktime(0,0,0,$m, 1, date('Y')));
        echo $month. '<br>';
    }
    ?>
    

    您所做的只是将当前日期循环 12 次,并在每次迭代中打印相同的日期月份。这就是为什么你会得到相同的月份。

    【讨论】:

      【解决方案4】:
      for ($m=1; $m<=12; $m++) {
          $month = date('M', strtotime("2014-$m-01"));
          echo $month. '<br>';
      }
      

      【讨论】:

        猜你喜欢
        • 2019-02-11
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多