Вот упрощенная версия того, как я делаю это в PHP
<select name="birthday_month" id="birthday_month">
<option value=""></option>
<? foreach(range(1,12) as $month): ?>
<option value="<?= $month ?>"><?= date('F', mktime(1,1,1,$month,1,2000)) ?></option>
<? endforeach; ?>
</select>
<select name="birthday_day" id="birthday_day">
<option value=""></option>
<? foreach(range(1,31) as $day): ?>
<option value="<?= $day ?>"><?= $day ?></option>
<? endforeach; ?>
</select>
<select name="birthday_year" id="birthday_year">
<option value=""></option>
<? foreach(range(date('Y'),1900) as $year): ?>
<option value="<?= $year ?>"><?= $year ?></option>
<? endforeach; ?>
</select>
Вы можете создавать функции, которые выводят их, если вы собираетесь их часто использовать.
Редактировать: я не трачу время на автоматическое заполнение дней, потому что дату все равно следует проверять на стороне сервера.