Не знам дали осъзнаваш, че с кода $date < 01.09 не сравняваш дати, а стринг или дроб. С днешна дата сравнението изглежда така: 09.01 < 01.09 и съответно резултата е false, а логиката ти изисква true. Когато сравняваш дати и доста по-лесно да работиш с UNIX Timestamp и работещият ти код би изглеждал така:
PHP:
$d1=date("Y"); // 2012
$d4=$d1+1; // 2013
$d2=$d1-1; // 2011
$d3="$d2-$d1"; // 2011-2012
$date=time();
if($date < strtotime( date("Y-09-01") )) { echo "$d3"; }
else { echo "$d1-$d4"; }
но в конкретния случай аз бих го направил в малко по-кратък вид:
PHP:
$schoolyear = (date("m")<9) ? (date("Y")-1)."-".date("Y") : date("Y")."-".(date("Y")+1);
echo $schoolyear;