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.