Autor Tema: Restar fechas y obtener años Javascript cambiar formato yyyy/mm/dd a dd/mm/yyyy  (Leído 10764 veces)

movaj

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Buenas!

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

Mis funciones JS:

Código: [Seleccionar]
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";
    }
}
« Última modificación: 04 de Febrero 2016, 09:22 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas movaj te recomiendo este curso de JavaScript http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=78&Itemid=206

En este hilo puedes ver cómo calcular tiempo transcurrido entre dos fechas (es la solución a un ejercicio del curso anterior): https://www.aprenderaprogramar.com/foros/index.php?topic=3536.0

Con lo que se explica en el curso creo que puedes resolver el problema, por ejemplo para admitir fechas en formato DD-MM-YYYY lo que podrías hacer es extraer la subcadena DD, luego la subcadena MM y luego la subcadena YYYY y crear un objeto Date a partir de estos datos.

Aquí dejo un ejemplo:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head> <title> Ejemplo aprenderaprogramar.com </title>
<meta charset="utf-8"/>
<script>
function pruebaFecha(){
var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth()+1; //January is 0!

    var yyyy = today.getFullYear();
    if(dd<10){
        dd='0'+dd
    }
    if(mm<10){
        mm='0'+mm
    }
    var today = dd+'/'+mm+'/'+yyyy;
    alert ("La fecha de hoy en formato dd/mm/yyyy es "+today);

var dia = 12;
var mes = 6
var year = 2087;
var fechaFutura = new Date(year, mes, dia);
alert ('Con esta fecha podemos hacer la misma operación: '+fechaFutura);
}
</script>

<title>Portal web</title>
</head>
<body onload="pruebaFecha()">
<div>Prueba de fechas</div>
</body>
</html>

De todas formas si tienes problemas pega el código completo (html, javascript, etc.) e indica el punto concreto donde no puedes avanzar explicando el motivo.

Salu2

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Te me adelantaste Ogramar,  ;D

Así que solo dejo el código que había preparado como ejemplo.

Código: [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo resta fechas</title><meta charset="utf-8">
<style>
#pulsador {padding:15px; width: auto; display: inline-block; margin: 25px;
cursor: pointer; color: yellow; border-radius: 40px; background: purple;}
.caja{border: solid 2px blue;}
</style>
<script type="text/javascript">
function calcularEdad(){
var fecha = prompt('Introduzca su fecha de nacimiento (dd-mm-yyyy): ');
var fechaActual = new Date();
var fechaNacimiento = new Date(fecha.substring(6)+'-'+fecha.substring(3, 5)+'-'+fecha.substring(0, 2));
var edad = fechaActual.valueOf()-fechaNacimiento.valueOf();
var msg = '';
if (parseInt( edad/(1000*60*60*24*365))<18){
msg = ' años y no es mayor de edad.';
}else{
msg = ' años y es mayor de edad.';
}
alert('Usted tiene: ' + parseInt( edad/(1000*60*60*24*365)) + msg);
}
</script>
</head>
<body>
<div id ="pulsador" onclick="calcularEdad()"> ¿Es mayor de edad? Pulsa aquí para empezar</div>
</body>
</html>

Saludos.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Bueno realmente tu código es más específico así que lo veo de gran ayuda, ahora nos falta saber la opinión de movaj  ::)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".