I think it's because you don't include the year in the date strings, so when you convert them via strtotime(), you are getting the date for the current year.
My suggestion would to set $date and $end_date as UNIX timestamp integers, then use date() to convert them only when actually outputting them.
<option selected disabled value="select-date">Select a date</option>
// Start date
$date = time();
//date('l jS F');
// End date
$end_date = strtotime('+120 days', $date);
while ($date <= $end_date)
echo "<option value='".date('l jS F', $date)."'>".date('l jS F', $date)."</option>\n";
$date = strtotime("+1 days", $date);