Non avrei mai immaginato un problema simile.
Ti propongo questo. Non è un granché ma sembra funzionare.
Codice PHP:
<?php
//--- Intervallo di 1 mese
$intervallo = new DateInterval('P1M');
$fine = date("Y-m-d");
$dataFine = new DateTime($fine);
$inizio = new DateTime($fine);
$inizio = $inizio->sub($intervallo);
//--- Intervallo di 1 giorno
$intervallo2 = new DateInterval('P1D');
// finché l'anno è il mese sono uguali
while ($inizio->format('Y-m') == $dataFine->format('Y-m')) {
// Data giorno precedente
$inizio = $inizio->sub($intervallo2);
}
print $inizio->format('Y-m-d');