Trasforma la data in giorno dell'anno, date('z') (il DAYOFYEAR di mysql...) poi le combinazioni sono solo 4, fai un giro di if/elseif...
codice:
$a = date('z', mktime(0, 0, 0, 6, 4, 2005 )); // inizio estivo
$b = date('z', mktime(0, 0, 0, 9, 24, 2005 )); // fine estivo
$c = date('z', mktime(0, 0, 0, 4, 24, 2005 )); // inizio periodo
$d = date('z', mktime(0, 0, 0, 8, 24, 2005 )); // fine periodo
If($a < $c AND $b > $d ) echo $tot = $d - $c; // il range e' tutto dentro estivo
elseif($a > $c AND $b < $d ) echo $tot = $b - $a; // inizio e fine esterne all'estivo
elseif($a > $c AND $b > $d ) echo $tot = $d - $a; // inizio fuori - fine dentro
elseif($a < $c AND $b < $d ) echo $tot = $b - $c; // inizio dentro - fine fuori
La data la puoi dividere in anno-mese-giorno con list ed explode...