2

2004 年から 2014 年までの日付をフォーマットされた方法で表示するループを作成しました。しかし、問題は、2004 ではなく 204 を表示していて、これを 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++;
    }
?>
4

10 に答える 10

6

必要なのは 1 つのループだけです

$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");
}
于 2012-11-05T14:16:24.140 に答える
3

$yr の代わりにこれを使用すると、正しい年が出力されます。

 str_pad($yr, 2, '0', STR_PAD_LEFT);

一番

于 2012-11-05T14:18:31.663 に答える
2

(まったく)異なる構造でもそれを行うことができます:

<?php
    function displayDate($yr, $yrMax) {
        if ($yr > $yrMax) {
            return true;
        }
        else {
            displayMonth($yr);
            $yr++;
            return displayDate($yr, $yrMax);
        }
    }
    function displayMonth($yr, $month = 1) {
        if ($month > 12) {
            return true;
        }
        else {
            displayDay($yr, $month);
            return displayMonth($yr, $month+1);
        }
    }
    function displayDay($yr, $month, $day = 1, $dayMax = 31) {
            if ($day > $dayMax) {
                return true;
            } else {
                $displayMonth = getMonth($month);
                echo "$day $displayMonth $yr<br>";
                $day++;
                return displayDay($yr, $month, $day, $dayMax);
            }
    }
    function getMonth($month) {
        switch($month){
            case 1:
                return 'Jan';
            case 2:
                return 'Feb';
            case 3:
                return 'Mar';
            case 4:
                return 'Apr';
            case 5:
                return 'May';
            case 6:
                return 'Jun';
            case 7:
                return 'Jul';
            case 8:
                return 'Aug';
            case 9:
                return 'Sep';
            case 10:
                return 'Oct';
            case 11:
                return 'Nov';
            case 12:
                return 'Dec';
        }
    }

            //Here we call the structure build above.
    if (displayDate(2004, 2014)) {
        echo 'Done';
    }
?>
于 2012-11-05T14:41:40.590 に答える
2

最も簡単な修正方法は、$yr = 2004 を設定し、$yr < 2014 の間ループすることです。数値の前にゼロを埋め込んでいないため、204、205 などです。

于 2012-11-05T14:13:16.153 に答える
1

あなたのコードによれば、これを試すことができます。標準的な方法ではありませんが:

<?php
$yar = 4;
while ($yar <= 9) {
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Jan 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Feb 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Mar 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Apr 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax May 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Jun 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Jul 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Aug 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Sep 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Oct 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Nov 200$yar <br>";
        $ax++;
    }
    $ax = 1;
    while ($ax <= 31) {
        echo "$ax Dec 200$yar <br>";
        $ax++;
    }
    $yar++;
}
$yr = 10;
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++;
}
?>
于 2012-11-06T04:14:08.730 に答える
0

str_pad関数 ( manual )を使用する必要があります。あなたの場合、次のようになります。

<?php 

    $yr = 4;
    while ($yr <= 14) {
        $x = 1;
        while ($x <= 31) {
            echo "$x Jan 20".str_pad($yr, 2, "0",STR_PAD_LEFT)."<br>";
            $x++;
        }
        $yr++;
    }
?>
于 2012-11-05T14:23:45.577 に答える
0

str_padを使用します。

echo $x.' Jan 20'.str_pad($yr, 2, '0', STR_PAD_LEFT).'<br>';  

変数$xの関数cal_days_in_monthを使用する方が適切です。

<?php

    $yr = 4;
    while ($yr <= 14) {

        $year = '20'.str_pad($yr, 2, '0', STR_PAD_LEFT);

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

            //number of days this month
            $daysCount = cal_days_in_month(CAL_GREGORIAN, $month, $year); 
            //catches the month spelled 
            $timestamp = mktime(0, 0, 0, $month, 1, $year);
            $monthText = date('M', $timestamp);

            for($day = 1; $day <= $daysCount; $day++) {
                echo $day.' '.$monthText.' '.$year.'<br>';
            }
        }

        $yr++;
    }
?>
于 2012-11-05T14:24:25.380 に答える