Ir para conteúdo

Arquivado

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

RafaCordL

Calculo de idade

Recommended Posts

Bom é a segunda vez que venho no fórum com a mesma função.

Pedi ajuda de vocês com o calculo de idade, vou expor e abaixo digo o problema.

 

JS:

function calculaIdade(){
    $("#dt_nascimento, #dt_diagnostico_sintoma").change(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[2]+"-"+vt_nasc[1]+"-"+vt_nasc[0];

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

        var dob = new Date(data_nascimento);

        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>

Então, algumas contas ele faz certa, outras faz errado!!! :cry:

O calculo da idade, tem influência com a data de diagnostico.

Se eu coloco a data de diagnostico a mesma data de hoje ou coloco a 5 dias atras, ele leva isso tudo em consideração.

Se colocar o nascimento dia 10/03/2015 e o diagnostico tem como data hoje, tem que aparecer 9 dias.

Se colocar o nascimento dia 10/03/2015 e o diagnostico tem como data 15/03/2015, tem que aparecer 5 dias.

Até ai tudo bem, essas datas calculam certo.

Levando em consideração a data de diagnostico sendo hoje, exemplo, fiz exatamente nessa ordem:

05/04/1993 que é minha data de nascimento, ele calcula certo, mostra 21 anos.

02/03/2015 ele calcula certo, mostra 17 dias.

01/03/2015 ele calcula errado, mostra 21 dias.

07/03/2015 ele calcula certo, mostra 12 dias.

05/04/1993 volto com essa data e ele calcula errado, mostra 21 dias.

05/10/2014 ele calcula certo, mostra 5 meses.

05/03/2015 ele calcula errado, mostra 14 meses.

 

Conclusão, estou endoidando! :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte teste:

No console, coloque

new Date('2015-01-01')

Agora, coloque

new Date('2015-1-1')

Os resultados são diferentes, não é mesmo? O que você precisa, é passar as variáveis de dia/mes para número (o que removeria o 0 a esquerda, para números menor que 10) antes de gerar o new Date().

Ou seja, ficaria assim:

 var vt_nasc = dt_nasc.split("/");
var data_nascimento = vt_nasc[2]+"-"+Number(vt_nasc[1])+"-"+Number(vt_nasc[0]);

var vt_diag = data_diag.split("/");
var data_diagnostico = vt_diag[2]+"-"+Number(vt_diag[1])+"-"+Number(vt_diag[0]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vi que na sua função ele escuta o change dos dois inputs.

Seria melhor colocar apenas em um, ou verificar se ambos estão preenchidos antes de continuar a função.

Ficaria algo como

$("#dt_nascimento, #dt_diagnostico_sintoma").change(function(){
        var data_diag = $("#dt_diagnostico_sintoma").val();
        var dt_nasc = $("#dt_nascimento").val();

        if(data_diag == '' || dt_nasc == '') return false;

 
        ....
});

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.