Tengo un formulario que recibe 2 fechas (fecha nacimiento y fecha registro) y necesito restar estas dos fechas para obtener la edad de una persona (no solo restar los años, hay que tener en cuenta el día mes y año para obtener la fecha correcta).
Ya tengo el código en JS que obtiene la EDAD, pero solo tiene en cuenta la fecha de nacimiento. La fecha de "hoy" toma la fecha actual, y necesito que coja otra variable también del formulario.
Además, el JS que tengo funciona para fechas en formato YYYY-MM-DD, y necesito que funcione para fechas en formato DD-MM-YYYY
Estos son los datos de mi formulario
INPUT Fecha de nacimiento: p101ifechanac
INPUT Fecha de registro: p101dfechaingreso
INPUT para mostrar resultado: p101iedad
Código Javascript :
function isValidDate(day,month,year) { var dteDate; month=month-1; dteDate=new Date(year,month,day); return ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear())); } function validate_fecha(fecha) { var patron=new RegExp("^(19|20)+([0-9]{2})([-])([0-9]{1,2})([-])([0-9]{1,2})$"); if(fecha.search(patron)==0) { var values=fecha.split("-"); if(isValidDate(values[2],values[1],values[0])) { return true; } } return false; } function calcularEdad() { var fecha=document.getElementById("p101ifechanac").value; if(validate_fecha(fecha)==true) { // Si la fecha es correcta, calculamos la edad var values=fecha.split("-"); var dia = values[2]; var mes = values[1]; var ano = values[0]; // cogemos los valores actuales var fecha_hoy = new Date(); var ahora_ano = fecha_hoy.getYear(); var ahora_mes = fecha_hoy.getMonth()+1; var ahora_dia = fecha_hoy.getDate(); // realizamos el calculo var edad = (ahora_ano + 1900) - ano; if ( ahora_mes < mes ) { edad--; } if ((mes == ahora_mes) && (ahora_dia < dia)) { edad--; } if (edad > 1900) { edad -= 1900; } // calculamos los meses var meses=0; if(ahora_mes>mes) meses=ahora_mes-mes; if(ahora_mes<mes) meses=12-(mes-ahora_mes); if(ahora_mes==mes && dia>ahora_dia) meses=11; // calculamos los dias var dias=0; if(ahora_dia>dia) dias=ahora_dia-dia; if(ahora_dia<dia) { ultimoDiaMes=new Date(ahora_ano, ahora_mes, 0); dias=ultimoDiaMes.getDate()-(dia-ahora_dia); } document.getElementById("p101iedad").value=""+edad+""; }else{ document.getElementById("p101iedad").value="La fecha "+fecha+" es incorrecta"; } }