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...