Hm. Bei mir funktioniert Dein Beispiel...
<?php
# fehlerhaft:
#$date = date('Ymd');
# Würg-Around funktioniert bisher:
$date = date('Ym') . '01' ;
$date_0 = date('Ym');
$date_1 = date('Ym', strtotime("$date -1 month"));
$date_2 = date('Ym', strtotime("$date -2 month"));
# Ausgaben:
echo "Aktueller Monat: " . $date_0 . PHP_EOL;
echo "Letzter Monat: " . $date_1 . PHP_EOL;
echo "Vorletzter Monat: " . $date_2 . PHP_EOL;
Aktueller Monat: 202307
Letzter Monat: 202306
Vorletzter Monat: 202305
Da ich im ersten Versuch der Ausgabe die letzten beiden Zeilen durch Copy & Paste erzeugte und dabei großzügig das „_0“, „_1“, „_2“ hinter „$date“ übersehen habe:
Hast Du in den nicht gezeigten Ausgaben bzw. bei der Verwendung einen Typo drin?