php: Alle "Jahre-Monate" von Startdatum bis Enddatum aufzählen
Jörg
- php
0 Gunnar Bittersmann0 Jörg0 Raketenskripter0 Jörg
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
@@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
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
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.
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