Me aburría y he rescatado el post. Te salió?
Mira esto:
Código PHP:
<script>
function esBisiesto(year) {
return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) ? true : false;
}
function limpiaSelect(elSelect) {
while( elSelect.hasChildNodes() )
elSelect.removeChild( elSelect.firstChild );
}
function aniadeOpcion(elSelect, texto, valor) {
var laOpcion=document.createElement("OPTION");
laOpcion.appendChild( document.createTextNode(texto) );
laOpcion.setAttribute("value",valor);
elSelect.appendChild(laOpcion);
}
function rellenar_anio(elSelect) {
for(var a=2005;a>=1900;a--)
aniadeOpcion(elSelect, a.toString(), a.toString() );
}
var meses=["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"];
function rellenar_mes(elSelect) {
for(var a=0;a<meses.length;a++)
aniadeOpcion(elSelect, meses[a], a );
}
function rellenar_dia(elSelect, anio, mes ) {
var ultimo_dia;
// febrero
if(mes==1)
ultimo_dia=esBisiesto(anio)?29:28;
// acaban en 31
else if( mes==0 || mes==4 || mes==6 || mes==7 || mes==9 || mes==11)
ultimo_dia=31;
else
ultimo_dia=30;
for(var a=1; a<=ultimo_dia; a++) {
aniadeOpcion(elSelect, a, a);
}
}
</script>
<select id="anio" onchange="actualizar()"></select>
<select id="mes" onchange="actualizar()"></select>
<select id="dia"></select>
<script>
var anio=document.getElementById("anio");
var mes=document.getElementById("mes");
var dia=document.getElementById("dia");
rellenar_anio(anio);
rellenar_mes(mes);
rellenar_dia(dia,2005,0);
function actualizar() {
limpiaSelect(dia);
rellenar_dia(dia, anio.options[anio.options.selectedIndex].value, mes.options[mes.options.selectedIndex].value );
}
</script>
Es mejorable porque ni se acuerda del dia que le marcas al cambiar el mes o el año, ni tampoco se posiciona al cargar en la fecha actual, pero bueno, son cambios que se pueden hacer posteriormente.