2012-11-05 83 views
2

我已經創建了一個循環,它將以格式化的方式顯示2004年到2014年的日期。但問題是,它顯示204而不是2004年,並繼續這一直到209 ..那麼,如何顯示那些年格式化的方式,如2004,2005,2006等
這裏是我創建的代碼,告訴我其中修復:循環問題計算年在PHP中

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

是否有一個原因,你經歷如此簡單的事情這麼長的過程?有許多PHP函數可以幫助您獲得輸出。 – George

回答

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

謝謝,雖然我知道它不是一個標準的方式,但我正在尋找這樣的代碼!再次感謝 –

2

最簡單的解決是設置$年= 2004和循環,而$年< 2014年你是不是有一個前導零填充你的號碼,因此,204,205,等

+0

嗯好主意.. –

+0

但我認爲不行...同樣的結果 –

+0

對不起,但我不相信。如果將變量設置爲等於2004,則不會打印出204.請檢查您的代碼。 –

0

這不是標準的,但你可以在這個while循環內添加一個if循環,像這樣:

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

else 
    { 
     echo "$x Oct 200$yr<br>"; 
    } 

$x++; 
} 

雖然你會忍心做這樣的事情我百思不得其解,雖然

0

這是因爲你設置$yr這樣的:

$yr = 4; 

試試這個:

$yr = sprintf('%02d', $yr); 
echo "$x Jan 20$yr<br>"; 
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); 
    } 
?> 

輸出:

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

這也有不顯示「2008年2月31」的好處等,該日期甚至不存在。

Codepad example of the code (WARNING: long output!)

+0

絕對最簡單和最短的答案。只有「con」(不像Con IMO)多少取決於'date()'。 –

+0

感謝您回答示例+1 :) –

+0

可以告訴我如何在此代碼中使用'str_replace'而不是'echo'嗎? Ama初學者在PHP編碼:() –

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"); 
} 
3

我不知道爲什麼你這麼多的循環做這個,用這個來代替$年,你會得到正確的年印刷:

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

最佳

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

使用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++; 
    } 
?> 
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'; 
    } 
?>