Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: movaj en 02 de Febrero 2016, 12:53

Título: Restar fechas y obtener años Javascript cambiar formato yyyy/mm/dd a dd/mm/yyyy
Publicado por: movaj en 02 de Febrero 2016, 12:53
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


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";
    }
}
Título: Re:Restar fechas y obtener años Javascript cambiar formato yyyy/mm/dd a dd/mm/yyyy
Publicado por: Ogramar en 04 de Febrero 2016, 09:22
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
Título: Re:Restar fechas y obtener años Javascript cambiar formato yyyy/mm/dd a dd/mm/yyyy
Publicado por: pedro,, en 04 de Febrero 2016, 09:37
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.
Título: Re:Restar fechas y obtener años Javascript cambiar formato yyyy/mm/dd a dd/mm/yyyy
Publicado por: Ogramar en 05 de Febrero 2016, 09:12
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  ::)