[PHP] Zeitraum ausgeben



  • Hallo!

    Aus meiner Datenbank erhalte ich die zwei Angaben eines Datums.
    Beispiel:
    2007-03-06
    2007-03-15

    Ich würde gerne diese Tage und alle Tage dazwischen anzeigen lassen.
    Weiß aber nicht wie.

    Ich habe an sowas gedacht wie

    while($tag1!=$tag2 AND $monat1!=$monat2)
    {
      echo $tag1++;
    }
    


  • Und woran scheitert es?
    Der Ansatz ist doch schonmal nicht schlecht.

    Aufteilen kannst du die Datumsangaben mit explode().
    Der Rest ist ne einfache while-Schleife. Wobei du aufpassen musst, da jeder Monat anders viele Tage hat. Oh, und Schaltjahre nicht vergessen 😉



  • explode brauch ich nicht. Da ich das ganze aus der DB hole kann ich ganz einfach per DATEFORMAT spliten.
    An die unterschiedlichen Tage und Schaltjahre hatte ich auch schon gedacht, aber irgendwie mag die Schleife nicht so wie ich will.
    Ich produziere da immer eine endlose und manchmal kommt garnichts. Aber mit der oben bekomm ich schonmal eine Endlosschleife.



  • Nun, ohne deinen Quellcode wird dir niemand sagen können, was du falsch machst ...



  • Okay. Hast natürlich recht.
    Also innerhalb eines Monats ist das ja kein Problem. Nur das wechseln in den nächsten Monat geht einfach überhaupt nicht.
    Vorerst habe ich nur die Monate mit 31 Tagen verarztet, da mein Testzeitraum
    2007-03-06 bis 2007-04-05 ist.

    $query_2 = mysql_query("SELECT DATE_FORMAT(datestamp, '%d') AS day, DATE_FORMAT(datestamp, '%m') AS month, DATE_FORMAT(datestamp, '%Y') AS year FROM klausuren ORDER BY datestamp ASC LIMIT 1");
    $data_2 = mysql_fetch_array($query_2);
    
    $query_3 = mysql_query("SELECT DATE_FORMAT(datestamp, '%d') AS day, DATE_FORMAT(datestamp, '%m') AS month, DATE_FORMAT(datestamp, '%Y') AS year FROM klausuren ORDER BY datestamp DESC LIMIT 1");
    $data_3 = mysql_fetch_array($query_3);
    
    $count_month=$data_2['month'];
    
    echo '<table style="margin-top:50px; border: none; border-collapse:collapse; width 100%;>"';
    
    while($count_month<=$data_3['month'])
    {  
        for($count_day=$data_2['day']; $count_day<$data_3['day']+1; $count_day++)
        {  
            echo '<tr>
                      <td>'.$count_day.'.'.$count_month.'</td>
                      <td></td>
                  </tr>';
    
            if($count_day=="31" && ($data_2['month']=="01" || $data_2['month']=="03" || $data_2['month']=="05" || $data_2['month']=="31" || $data_2['month']=="08" || $data_2['month']=="10" || $data_2['month']=="12"))
            {
                $count_month++;
                $count_day="0";
            }
    
        }
    }    
    
    echo '</table>';
    


  • $start = '2007-06-27';
    $parts_start = explode('-', $start);
    $end = '2007-07-03';
    $parts_end = explode('-', $end);
    
    $s = mktime(0, 0, 0, $parts_start[1], $parts_start[2], $parts_start[0]);
    $e = mktime(0, 0, 0, $parts_end[1], $parts_end[2], $parts_end[0]);
    while($s <= $e) {
    	echo date('d.m.Y', $s) . "<br/>\n";
    	$s += 3600 * 24;
    }
    


  • Hi Airdamn!

    Der Code funktioniert super. Ich habe den Teil ab Zeile 6 benutzt.
    Ich versteh ich auch bis auf diese Zeile

    $s += 3600 * 24;
    

    Kannst du mir mal erklären, was du da machst und warum?



  • Die Zeile macht nichts anderes als das Datum in $s einen Tag hochzuzählen,
    denn ein Tag hat 60 Sekunden * 60 Minuten * 24 Stunden.


Anmelden zum Antworten