Hallo,
$utstart=mktime(0, 0, 0, $day1, $month1, $year1);
$utend=mktime(0, 0, 0, $day2, $month2, $year2);
$diff= ($utend - $utstart);
$diff=$diff/(60*60*24);
Unabhängig vom Tag/Monat-Problem: Du gehst hier aber fälschlicherweise davon aus, dass ein Tag immer 24 Stunden hat. Das stimmt in Lokalzeit aber leider nicht (ein Tag im Jahr hat 23 Stunden und einer hat 25 Stunden - wegen der Zeitumstellung). Ich würde daher vorschlagen, gmmktime() statt mktime() zu verwenden, gmmktime() verwendet eine kontinuierliche Zeitskala. Es rechnet zwar immer in UTC (und damit in einer anderen Zeitzone, als Du lebst), aber zumindest die kalendarischen Berechnungen sind damit exakt.
Alternativ könntest Du natürlich auch das ganze als Float-Division schreiben und dann runden, das halte ich aber für nicht sonderlich optimal.
Oder Du rechnest von Hand, ich habe im Archiv etliche Postings zum Thema Datums- und Zeitberechnung in PHP verfasst.
Viele Grüße,
Christian