在PHP中循环问题计数年

Max*_*ler 2 php while-loop

我创建了一个循环,它将以格式化的方式显示2004年到2014年的日期.但问题是,它显示204而不是2004并继续这个直到209 ..所以,如何以格式化方式显示那些年份,如2004,2005,2006等.
这是我创建的代码,告诉我在哪里固定:

<?php
    $yr = 4;
    while ($yr <= 14) {
        $x = 1;
        while ($x <= 31) {
            echo "$x Jan 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Feb 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Mar 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Apr 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x May 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Jun 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Jul 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Aug 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Sep 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Oct 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Nov 20$yr<br>";
            $x++;
        }
        $x = 1;
        while ($x <= 31) {
            echo "$x Dec 20$yr<br>";
            $x++;
        }
        $yr++;
    }
?>
Run Code Online (Sandbox Code Playgroud)

Bab*_*aba 6

你需要的只是一个循环

$start = 2004;
$end = 2014;

$dateTime = new DateTime();
$dateTime->setDate($start, 1, 1);

echo "<pre>";
while ( $dateTime->format("Y") <= $end ) {
    echo $dateTime->format("d M Y"), PHP_EOL;
    $dateTime->modify("+1 day");
}
Run Code Online (Sandbox Code Playgroud)


h2o*_*ooo 5

为什么要经历如此漫长而奇怪的过程,何时可以做到这样的事情?

<?php
    $yearStart = 2004;
    $yearEnd = 2012;
    $unixTime = strtotime($yearStart . "-01-01 00:00:00");
    $endUnixTime = strtotime($yearEnd . "-12-31 23:59:59");
    while ($unixTime < $endUnixTime) {
        echo date("d M Y", $unixTime) . PHP_EOL;
        $unixTime = strtotime("+1 day", $unixTime);
    }
?>
Run Code Online (Sandbox Code Playgroud)

输出:

01 Jan 2004
02 Jan 2004
03 Jan 2004
...
29 Dec 2012
30 Dec 2012
31 Dec 2012
Run Code Online (Sandbox Code Playgroud)

这也有额外的好处,没有显示"2008年2月31日"等,因为该日期甚至不存在.

Codepad的代码示例(警告:长输出!)