Calcular a idade em Javascript

Realizamos e explicamos uma função que recebe uma data de nascimento e devolve o número de anos desde a data, ou seja, a idade.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 28/6/07
Valorize este artigo:
Neste artigo vamos explicar uma função que calcula a idade de uma pessoa. Para isso recebe um string com a data de nascimento da pessoa e devolve o número de anos que tem. Estamos diante um exercício que ilustra muito bem o trabalho com datas em Javascript.

Referência: Para aprender algo que nos sirva de base no cálculo de datas seria interessante ler o artigo Clase Date em Javascript.

O método de trabalho

Nós estamos pensando em receber uma data em formato português: algo como "12/10/1975", de tipo string. O primeiro será separar os diferentes valores de ano, mês, dia. Para isso, utilizamos o método split(), que pertence à classe String (tipo da data que vamos receber), que devolve um array com o valor de cada uma das partes da cadeia, utilizando como separador o caractere "/". Depois da separação, no array devolvido, deveríamos ter três campos, onde o primeiro (o de índice 0) salvará o dia, o segundo o mês e o terceiro o ano.

Referência: Os métodos da classe String podem ser vistos no artigo Classe String em Javascript.

Vamos realizar a seguir algumas comprovações para certificarmos que as datas estejam corretas, ou seja, que temos um valor numérico como dia, outro como mês e outro como ano. Se não for assim, devolveremos false, que deveria se interpretar como que a função é incapaz de calcular a idade, porque a data de nascimento passada não é correta.

A seguir restaremos o número de anos da data atual, que poderiam ser 2007, com o número de ano da data de nascimento, que será algo como 1975. Neste caso, daria 32, porém nós vamos considerar 31, pois não sabemos se a suposta pessoa já fez anos no ano curso, ou não. Ou seja, hoje que é junho, se fez anos em março, essa pessoa já teria 32 anos, porém se faz anos em agosto, teria agora 31 anos.

Portanto, nosso próximo passo será saber em qual mês a pessoa fez anos e disso, poderíamos ter três casos.
  1. Se o mês atual for menor que o mês de nascimento. Então, é porque ainda não cumpriu os anos ainda neste período anual. (Os anos, no exemplo anterior, seriam 31)
  2. Se o mês atual for maior que o mês de nascimento, quer dizer que essa pessoa sim que já celebrou seu aniversário este ano. (Os anos, no exemplo anterior, seriam 32)
  3. Se os dois meses forem iguais, temos que observar o dia de uma maneira similar a como foi realizado com os meses:
    1. Se o dia atual for menor que o dia de nascimento, é porque faltam uns dias ainda para seu aniversário (Visto o exemplo anterior, os anos seriam 31).
    2. Se o dia atual for maior ou igual que o dia de nascimento é porque já cumpriu anos (Visto o exemplo anterior, os anos seriam 32).
O script para calcular a idade

Bom, com estas explicações esperamos que qualquer pessoa com um nível médio de Javascript, poderia realizar o código desta função, porém o objetivo é mostrar-lhes nossa proposta de código, que está comentada para que possa ser entendida facilmente.

//calcular a idade de uma pessoa
//recebe a data como um string em formato portugues
//devolve um inteiro com a idade. Devolve false em caso de que a data seja incorreta ou maior que o dia atual
function calcular_idade(data){

    //calculo a data de hoje
    hoje=new Date()
    //alert(hoje)

    //calculo a data que recebo
    //descomponho a data em um array
    var array_data = data.split("/")
    //se o array nao tem tres partes, a data eh incorreta
    if (array_data.length!=3)
       return false

    //comprovo que o ano, mes, dia são corretos
    var ano
    ano = parseInt(array_data[2]);
    if (isNaN(ano))
       return false

    var mes
    mes = parseInt(array_data[1]);
    if (isNaN(mes))
       return false

    var dia
    dia = parseInt(array_data[0]);
    if (isNaN(dia))
       return false


    //se o ano da data que recebo so tem 2 cifras temos que muda-lo a 4
    if (ano<=99)
       ano +=1900

    //subtraio os anos das duas datas
    edad=hoje.getYear()- ano - 1; //-1 porque ainda nao fez anos durante este ano

    //se subtraio os meses e for menor que 0 entao nao cumpriu anos. Se for maior sim ja cumpriu
    if (hoy.getMonth() + 1 - mes < 0) //+ 1 porque os meses comecam em 0
       return idade
    if (hoje.getMonth() + 1 - mes > 0)
       return idade+1

    //entao eh porque sao iguais. Vejo os dias
    //se subtraio os dias e der menor que 0 entao nao cumpriu anos. Se der maior ou igual sim que já cumpriu
    if (hoje.getUTCDate() - dia >= 0)
       return idade + 1

    return idade
}


Nota: Para entender esta função será necessário saber que, quando se executa return dentro de uma função, se devolve o valor indicado e se sai da função, sem que se possa executar outras sentenças que existam debaixo do return.





Comentários do artigo
Foram enviados 6 comentários ao artigo
4 comentários não revisados
2 comentários revisados:
Por: Mauricio
09/4/08
Excelente artigo.
Mas como seria a chamada para essa função ?


Abraços !
Calcular a idade em javaScript Metodo mais rapido e mais pratico !
Por: ysabella fontis
17/3/09
pra qm precisar
function calculaIdade(dataNasc){
var dataAtual = new Date();
var anoAtual = dataAtual.getFullYear();
var anoNascParts = dataNasc.split('/');
var diaNasc =anoNascParts[0];
var mesNasc =anoNascParts[1];
var anoNasc =anoNascParts[2];
var idade = anoAtual - anoNasc;
var mesAtual = dataAtual.getMonth() + 1;
//se mês atual for menor que o nascimento, nao fez aniversario ainda; (26/10/2009)
if(mesAtual < mesNasc){
idade--;
}else {
//se estiver no mes do nasc, verificar o dia
if(mesAtual == mesNasc){
if(dataAtual.getDate() < diaNasc ){
//se a data atual for menor que o dia de nascimento ele ainda nao fez aniversario
idade--;
}
}
}
return idade;
}

Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato