L'inghippo, secondo me è l'istruzione:
$compleavanti = strtotime($annoavanti.'-'.$mese.'-'.$giorno)
che da il tempo in secondi all'ora 0
mentre now() da il tempo del giorno attuale in secondi ora compresa (che non è l'ora 0).
Facendo la differenza
$datediffcomple = $compleavanti - $now
ottieni certamente un giorno in meno, dovuti ai secondi 0 ($compleavanti) meno quelli di now() che sono sicuramente diversi da 0.
sostituisci floor con ceil che arrotonda all'unità superiore.
Altra cosa, non sono sicuro che il test
if($giorno <= $gior && $mese <= $mes)
ti dia il risultato che ti aspetti, in non uso && ma and (uso diversi linguaggi e per abitudine forse unifico i comandi) ma credo che la data 10 agosto ti venga scartata perchè il mese è minore ma il giorno no (con test in data 6 ottobre 2012).