Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RafaCordL

Calcular idade

Recommended Posts

Olá pessoal, fiz esse calculo de idade, mas tem um probleminha...

Quando coloco data de nascimento 05/04/2010 ele me da a idade de 5 anos, mas não seria 5, e sim 4 anos...

Se coloco 05/01/2015 ele me da 10 meses... Se coloco 09/02/2015 ele me da 9 meses...

LOGO isso está bem louco, rs.

 

JS:

function calculaIdade(){
    $("#dt_nascimento, #dt_diagnostico_sintoma").blur(function(){
        var data_diag = $("#dt_diagnostico_sintoma").val();
        var dt_nasc = $("#dt_nascimento").val();
        $("#idade").val("");
        
        var vt_nasc = dt_nasc.split("/"); 
        var data_nascimento = vt_nasc[1]+"/"+vt_nasc[0]+"/"+vt_nasc[2];

        var vt_diag = data_diag.split("/");
        var data_diagnostico = vt_diag[1]+"/"+vt_diag[0]+"/"+vt_diag[2]; 
        
        var now = new Date(vt_diag[2],vt_diag[0],vt_diag[1]);
        var today = new Date(vt_diag[2],vt_diag[0],vt_diag[1]);
        
        var yearNow = now.getYear();
        var monthNow = now.getMonth();
        var dateNow = now.getDate();

        var dateString = data_nascimento;

        var dob = new Date(dateString.substring(6,10),
        dateString.substring(0,2)-1,                   
        dateString.substring(3,5)                 
        );

        var yearDob = dob.getYear();
        var monthDob = dob.getMonth();
        var dateDob = dob.getDate();
        var age = {};
        var ageString = "";
        var yearString = "";
        var monthString = "";
        var dayString = "";


        yearAge = yearNow - yearDob;

        if (monthNow >= monthDob)
            var monthAge = monthNow - monthDob;
        else {
            yearAge--;
            var monthAge = 12 + monthNow -monthDob;
        }

        if (dateNow >= dateDob)
            var dateAge = dateNow - dateDob;
        else {
            monthAge--;
            var dateAge = 31 + dateNow - dateDob;

            if (monthAge < 0) {
                monthAge = 11;
                yearAge--;
            }
        }

        age = {
            years: yearAge,
            months: monthAge,
            days: dateAge
        };

        if ( age.years > 1 ) yearString = " years";
        else yearString = " year";
        if ( age.months> 1 ) monthString = " months";
        else monthString = " month";
        if ( age.days > 1 ) dayString = " days";
        else dayString = " day";

        if(age.years > 0){
            $("#idade").val(age.years);
            $('#idade_anos').attr("checked", true);
        }else if(age.months > 0 ){
            $("#idade").val(age.months);
            $('#idade_mes').attr("checked", true);
        }else if(age.days){
            $("#idade").val(age.days);
            $('#idade_dia').attr("checked", true);
        }else if(age.days == 0){
            $("#idade").val('1');
            $('#idade_hora').attr("checked", true);
        }
    });
}

HTML:

<div class="espacamento" name="#7">
  <legend>7 - Data do Diagnóstico</legend>
  <input type="text" id="dt_diagnostico_sintoma" name="dt_diagnostico_sintoma" placeholder="__/__/____" required>
</div>

<div class="espacamento" name="#9">
  <legend>9 - Data de Nascimento</legend>
  <input type="text" id="dt_nascimento" name="dt_nascimento" placeholder="__/__/____" required>
</div>

<div id="campo_idade">
  <div class="espacamento" name="#10">
    <legend>10 - (ou) Idade</legend>
    <input type="text" id="idade" name="nu_idade" disabled required>
  </div>
  <label><input type="radio" name="tipo_idade" value="1" id="idade_hora"/>1- Hora(s)</label>
  <label><input type="radio" name="tipo_idade" value="2" id="idade_dia"/>2- Dia(s)</label>
  <label><input type="radio" name="tipo_idade" value="3" id="idade_mes"/>3- Mês(es)</label>
  <label><input type="radio" name="tipo_idade" value="4" id="idade_anos"/>4- Ano(s)</label>
</div>

Help me?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem coisa invertida no seu new Date().

A ordem correta seria

// ex. 29/01/2000
//new Date(ano, mes-1, dia)
new Date(2000, 0, 29)

ou ainda usar uma string direta

// Ex. 20/01/2000
// new Date('ano-mes-dia');
new Date('2000-01-20');

JSFiddle: http://jsfiddle.net/kpvom6ze/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.