Jörg: php: Alle "Jahre-Monate" von Startdatum bis Enddatum aufzählen

Frohe Weihnachten Euch allen,

ich möchte, ausgehend von einem Startzeitpunkt YYYY-mm bis zu einem Endzeitpunkt YYYY-mm alle Jahr-Monat Kombinationen aufzählen.

Gibt es da eine php-Funktion, die mir dabei hilft?

Jörg

  1. @@Jörg

    ich möchte, ausgehend von einem Startzeitpunkt YYYY-mm bis zu einem Endzeitpunkt YYYY-mm alle Jahr-Monat Kombinationen aufzählen.

    Gibt es da eine php-Funktion, die mir dabei hilft?

    Ja: Datumfuntionen und Schleifen.

    😷 LLAP

    --
    „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
    — Joachim Gauck über Impfgegner
  2. Ziemlich ärgerlich 😕
    Ich hatte soeben mein Posting um einen Lösungsvorschlag editiert. Leider hat das so lange gedauert, dass ich darüber das Zugriffsrecht verlor. Das alleine ist nicht schlimm, aber das dabei mein kompletter Edit-Text verloren geht, ist ärgerlich!

    Hier also nochmal, als Pseudocode:

    i=0;
    while (strtotime(Starjahr-Startmonat) <= strtotime(Zieljahr-Zielmonat)) {
    echo Startzeitpunkt + i Monate;
    i++;
    }
    
    

    Hierbei, wenns keine sinnvollere Lösung gibt, wüßte ich aber nicht genau, wie ich "Startzeitpunkt + i Monate" aufdröseln muß.

    Jörg

    1. Dein Problem ist wohl die Fallunterscheidung.

      Gehe die Jahre durch. Wenn das Jahr das erste Jahr durchgezählt wird beginne mit dem Startmonat, sonst 1; Wenn das Jahr das letzte Jahr durchgezählt wird ende mit dem Endmonatmonat, sonst 12;

      <?php
      $firstDate = "25.12.2021";
      $lastDate  = "25.11.2023";
      
      $firstDate = strtotime( $firstDate );
      $lastDate  = strtotime( $lastDate );
      
      $firstYear  = date('Y', $firstDate );
      $firstMonth = date('n', $firstDate );
      
      $lastYear   = date('Y', $lastDate );
      $lastMonth  = date('n', $lastDate );
      
      for ( $Y = $firstYear; $Y <= $lastYear; $Y++  ) {
      
      	$SM=1;
      	$LM=12;
      	
      	if ( $Y == $firstYear ) {
      		$SM =  $firstMonth;
      	} 	
      	if ( $Y == $lastYear ) {
      		$LM =  $lastMonth;
      	} 
      	for ( $M = $SM; $M <= $LM; $M++ ) {
      		echo "$Y, $M\n";
      	}
      }
      

      Ausgabe:

      2021, 12
      2022, 1
      2022, 2
      2022, 3
      2022, 4
      2022, 5
      2022, 6
      2022, 7
      2022, 8
      2022, 9
      2022, 10
      2022, 11
      2022, 12
      2023, 1
      2023, 2
      2023, 3
      2023, 4
      2023, 5
      2023, 6
      2023, 7
      2023, 8
      2023, 9
      2023, 10
      2023, 11
      

      Feinheiten, wie den Test, ob Startdatum und Enddatum a) erkannt werden und b) sich in der richtigen Weise unterscheiden, musst Du selbst nachrüsten.

      1. Hallo Raketenskripter,

        vielen lieben Dank für deine Hilfe 😀

        Aber ich dachte an etwas einfacheres, sowas zum Beispiel:

        $firstDate = "2021-12";
        $lastDate  = "2023-11";
        
        $i=0;
        while (strtotime("$firstDate + $i month") <= strtotime($lastDate)) {
            echo date('Y-m',strtotime("$firstDate + $i month"))."\n";
            $i++;
        }
        

        Ausgabe:

        2021-12
        2022-01
        2022-02
        2022-03
        2022-04
        2022-05
        2022-06
        2022-07
        2022-08
        2022-09
        2022-10
        2022-11
        2022-12
        2023-01
        2023-02
        2023-03
        2023-04
        2023-05
        2023-06
        2023-07
        2023-08
        2023-09
        2023-10
        2023-11
        
        

        Grüße, Jörg