Datum: Monate/Jahr errechnen

  • Datum: Monate/Jahr errechnen

    Hallo Gemeinde,

    ich habe ein kleines Problem:

    Ich habe ein Anfangsdatum und ein Enddatum (Enddatum ist immer das aktuelle Datum).

    Nun will ich für jeden Monat ein Datenbankeintrag erstellen von Anfangsdatum, bis Enddatum, unter berücksichtigung des Jahres.

    BSP:

    01/06 - Eintrag1
    02/06 - Eintrag2
    03/06 - Eintrag3

    Das funktioniert bei mir auch schon ganz gut, nur wenn ich ein Startdatum habe :27.11.2005 und das Enddatum: 27.11.2006, habe ich mein Problem ich habe nur ein 1 Datenbank eintrag, da ich nicht weiß wie ich das Jahr berücksichtigen soll.

    Normal müsste ich 12Einträge haben:

    11/05 - Eintrag1
    12/05 - Eintrag2
    ....
    11/06 - Eintrag12

    Hat jemand eine Ahnung wie das machen kann?

    Mein überlegung war:

    Bide Zeiten mit mktime() umwandeln. Dann timstamp - timestamp, Das funktioniert nur, solange der Monatsabstand <= 12 ist anders nicht. Nun bin ich mit meinen Ideen am Ende.

    Ich habe es mit einer verschachtelten Schleife versucht aber ohne erfolg :(. Stehe da irgendwie total auf dem schlauch. Hat wer eine idee?

    Quellcode

    1. <?php
    2. $beginn_date = "28.08.2005";
    3. $beginn_convert = explode(".", $beginn_date);
    4. $end = time();
    5. $end_date = date("d.m.Y", $end); //28.11.2006
    6. $end_convert = explode(".", $end_date);
    7. $year_count = $end_convert[2] - $beginn_convert[2];
    8. $month_count = $end_convert[1] - $beginn_convert[1];
    9. for ($i = 0; $i <= $year_count; $i++) {
    10. $beginn_convert[2]++;
    11. for ($j = 0; $j <= $month_count; $j++) {
    12. echo "$beginn_convert[1]/$beginn_convert[2]<br />";
    13. $beginn_convert[1]++;
    14. }
    15. }
    16. ?>
    Alles anzeigen


    Raus kommen soll:

    08/2005
    09/2005
    11/2005
    12/2005
    01/2006
    02/2006
    03/2006
    04/2006
    05/2006
    06/2006
    07/2006
    08/2006
    09/2006
    10/2006
    11/2006

    so long

    JFoX
  • hab auch grad angefangen was zu coden.. daher poste ich noch meinen code hinterher...
    falls du printf und [phpdoc]sscanf[/phpdoc] noch nicht kennst, les dich am besten mal ein.

    Quellcode

    1. $start = '28.08.2005';
    2. $end = '28.11.2006';
    3. list($s0, $s1, $s2) = sscanf($start, "%02d.%02d.%04d");
    4. list($e0, $e1, $e2) = sscanf($end, "%02d.%02d.%04d");
    5. do {
    6. if($s1==13) {
    7. $s1=1;
    8. $s2++;
    9. }
    10. printf("%02d/%04d<br />", $s1++, $s2);
    11. } while($s1 != $e1+1 || $s2 != $e2);
    Alles anzeigen
  • Uff, auf die idee bin ich überhaupt nicht gekommen... vielen Danke für die Hilfe nun klappt das :)

    sscanf() printf() ist mir bekannt, habe es nur noch nie verwendet... desshalt habe ich es nicht in betracht gezogen, oder besser gesagt aus meine Brain verdrängt :)

    so long
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Ich habe mal noch eine Frage dazu, als Format gibst du ja %d an, das ist soweit klar aber was bedeutet %02d oder %04d? Hängt das mit der stellenzahlt zusammen?

    Dann habe ich noch ein paar Probleme mit der Formatierung, die jedoch lösen konnte, auf eine umständliche Art und Weise. Da die ich die Variabeln ($s1, $s2) in die DB eintragen will.

    Quellcode

    1. <?php
    2. $beginn = "28.08.2005";
    3. $beginn_convert = explode(".", $beginn);
    4. $beginn_timestamp = mktime(0, 0, 0, $beginn_convert[1], $beginn_convert[0], $beginn_convert[2]);
    5. $beginn_date = date("d.m.y", $beginn_timestamp);
    6. $start = $beginn_date;
    7. $ende = time();
    8. $ende_date = date("d.m.y", $ende);
    9. $end = $ende_date;
    10. //echo "$end, $start";
    11. list($s0, $s1, $s2) = sscanf($start, "%02d.%02d.%02d");
    12. list($e0, $e1, $e2) = sscanf($end, "%02d.%02d.%02d");
    13. do {
    14. if($s1==13) {
    15. $s1=1;
    16. $s2++;
    17. }
    18. //printf("%02d/%02d<br />", $s1++, $s2);
    19. list($m) = sscanf($s1++, "%02d");
    20. list($y) = sscanf($s2, "%02d");
    21. $anzahl = strlen($m);
    22. switch ($anzahl) {
    23. case 1:
    24. $m = "0$m";
    25. break;
    26. }
    27. echo "$m/0$y<br />";
    28. } while($s1 != $e1+1 || $s2 != $e2);
    29. ?>
    Alles anzeigen


    Wie gesagt es funktioniert, es ist zwar nicht das non+ultra, aber es geht, ne Codeverfeinerung wäre mir auch lieber, werde ich noch überarbeiten.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.