Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么这张单子一直排到九月份?_Php_Loops_Date - Fatal编程技术网

Php 为什么这张单子一直排到九月份?

Php 为什么这张单子一直排到九月份?,php,loops,date,Php,Loops,Date,我有这个密码 <?php $startYear = 2011; while ($startYear <= date('Y')) { echo "$startYear <br>"; for ($m=1; $m<=12; $m++) { $theDate = $startYear . $m; if ($theDate <= date('Yn')) { $

我有这个密码

<?php
$startYear = 2011;

 while ($startYear <= date('Y')) {
    echo "$startYear <br>";

        for ($m=1; $m<=12; $m++) {
            $theDate = $startYear . $m;

            if ($theDate <= date('Yn')) {
                $month = date('F', mktime(0,0,0,$m, 1, $startYear));
                echo $month. '<br>';
            }
        }
    $startYear++;
 };
?>

因为我想写一个类型的列表

2013年

  • 一月
  • 二月
  • 行军
  • 四月
  • 五月
  • 六月
  • 七月
  • 八月
  • 九月
  • 十月
  • 十一月
  • 十二月
直到本年度和本月


但是每年每个月的列表都会一直持续到9月,为什么呢?

您必须从以下内容更改您的if声明:

if ($theDate <= date('Yn')) {

if($theDate因为201410>21049。这是当您使用
date()
进行不适合的日期数学时发生的情况

DateTime()
及其相关函数更适合于此:

$startYear = 2011;

$start    = (new DateTime())->setDate($startYear,1,1);
$end      = (new DateTime())->setDate($startYear,1,1)->modify('+1 year');
$interval = new DateInterval('P1M');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) { 
    echo $dt->format('F') . "\n";
}

如果您使用的是PHP5.5+,它会更干净一些

$startYear = 2011;

$start    = (new DateTimeImmutable())->setDate($startYear,1,1);
$end      = $start->modify('+1 year');
$interval = new DateInterval('P1M');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) { 
    echo $dt->format('F') . "\n";
}

我编辑了代码,将前导零添加到变量中,该变量将表示月份编号,编辑了当前日期从日期('Yn')到日期('Ym'),并且有效

<?php
$startYear = 2011;


while ($startYear <= date('Y')) {
    echo "$startYear <br>";

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

            $f = sprintf('%02d', $m);
            $theDate = $startYear . $f;

            if ($theDate <= date('Ym')) {
                $month = date('F', mktime(0,0,0,$f, 1, $startYear));
                echo $month. '<br>';
            }
        }
    $startYear++;
};
?>


谢谢大家的回答。

@Rizier123我想他们不明白这个网站是如何运作的。@johncode似乎就是这样
<?php
$startYear = 2011;


while ($startYear <= date('Y')) {
    echo "$startYear <br>";

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

            $f = sprintf('%02d', $m);
            $theDate = $startYear . $f;

            if ($theDate <= date('Ym')) {
                $month = date('F', mktime(0,0,0,$f, 1, $startYear));
                echo $month. '<br>';
            }
        }
    $startYear++;
};
?>