Период подсчета циклов в PHP

Я создал цикл, который будет отображать дату с 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++; } ?> 

Согласно вашему коду, вы можете попробовать это. Хотя это не стандартный способ:

 <?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++; } ?> в <?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++; } ?> 

Все, что вам нужно, это одна петля

 $start = 2004; $end = 2014; $dateTime = new DateTime(); $dateTime->setDate($start, 1, 1); echo "<pre>"; while ( $dateTime->format("Y") <= $end ) { echo $dateTime->format("d MY"), PHP_EOL; $dateTime->modify("+1 day"); } 

Зачем проходить такой долгий и нечетный процесс, когда вы можете сделать что-то подобное?

 <?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 MY", $unixTime) . PHP_EOL; $unixTime = strtotime("+1 day", $unixTime); } ?> 

Вывод:

 01 Jan 2004 02 Jan 2004 03 Jan 2004 ... 29 Dec 2012 30 Dec 2012 31 Dec 2012 

У этого также есть дополнительный бонус, не показывающий «31 февраля 2008» и т. Д., Поскольку эта дата даже не существует.

Пример кода Codepad (ПРЕДУПРЕЖДЕНИЕ: длинный вывод!)

Я не уверен, почему вы делаете это с помощью множества циклов, используйте это вместо $ yr, и вы получите правильный печатный год:

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

Лучший

Самое простое исправление – установить $ yr = 2004 и цикл while $ yr <2014. Вы не заполняете свои цифры с помощью начального нуля, следовательно, 204, 205 и т. Д.

Вы могли бы сделать это также с (совсем) разной структурой:

 <?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'; } ?> в <?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'; } ?> в <?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'; } ?> в <?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'; } ?> 

Это не стандартно, но вы можете добавить цикл if внутри цикла while, как это:

 while($x <= 31) { if ($yr>=10) { echo "$x Oct 20$yr<br>"; } else { echo "$x Oct 200$yr<br>"; } $x++; } 

Хотя вы хотите сделать что-то подобное, это меня бьет, хотя

Это потому, что вы устанавливаете $yr следующим образом:

 $yr = 4; 

Попробуй это:

 $yr = sprintf('%02d', $yr); echo "$x Jan 20$yr<br>"; 

Использовать str_pad :

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

Более целесообразно использовать функцию cal_days_in_month переменной $ x :

 <?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++; } ?> в <?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++; } ?> 

Вам нужно использовать функцию str_pad ( руководство ). В вашем случае это происходит следующим образом:

 <?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++; } ?> в <?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++; } ?>