Calculando a idade com JavaScript

Um exemplo de como calcular a idade usando JS

Hoje em dia é comum utilizar bibliotecas para facilitar o nosso trabalho com JavaScript, no caso das datas, é comum o uso da biblioteca moment.js.

Porém, para determinadas necessidades, pode ser mais prático utilizar os próprios recursos do JavaScript. É o que vamos ver agora, com um exemplo de cálculo de idade.

Em um primeiro momento, parece algo simples, basta pegar o ano atual e subtrair do ano da data informada. Um exemplo:

var ano_atual = new Date().getFullYear();

var ano_informado = 1970;

console.log(ano_atual - ano_informado);

No JavaScript, temos um objeto chamado "Date" que nos permite trabalhar com datas. Entre os vários métodos, existe um chamado "getFullYear", que retorna o ano com 4 dígitos. O objeto "Date" não pode ser utilizado diretamente, ele precisa primeiro ser instanciado, por isso o "new" no começo.

Outros métodos comuns do objeto Date são "getMonth" que retorna o mês atual e "getDate" que retorna a data atual. Uma observação, o "getMonth" retorna um número de 0 a 11, sendo "0" para janeiro e "11" para dezembro.

Perceba que estamos informado diretamente o ano, mas, seria melhor ele pegar esta informação de uma data completa. Vamos fazer a seguinte alteração:

var ano_atual = new Date().getFullYear();

var data_aniversario = "01/05/1970";

var ano_informado = data_aniversario.split('/')[2];

console.log(ano_atual - ano_informado);

Veja que a data foi inserida no formato DD/MM/YYYY. Como a data é uma string, ela possui um método chamado "split", que permite quebrar a string num array utilizando o "/" como separador. Desta forma, quebramos a data num array de 3 posições. Como o elemento inicial do array começa na posição zero, estamos pegando a segunda posição do array (último elemento ou terceiro elemento se preferir), isso nos permite recuperar o ano.

Apesar do código funcionar, existe um problema. Não estamos considerando o resto da data no cálculo. Por exemplo, se a data atual for "10/10/2019" e a data informada for "01/05/1970", o resultado vai dar 49, sendo que o correto seria 48.

Para facilitar e permitir o reaproveitamento deste código, vamos criar uma função. O código final você pode conferir a seguir:

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 mes atual for menor que o nascimento, nao fez aniversario ainda;  

if(mesAtual < mesNasc){

idade--; 

} else {

//Se estiver no mes do nascimento, verificar o dia

if(mesAtual == mesNasc){ 

if(new Date().getDate() < diaNasc ){ 

//Se a data atual for menor que o dia de nascimento ele ainda nao fez aniversario

idade--; 

}

}

return idade; 

}

console.log(calculaIdade('31/12/1970'));

 

Quer conferir mais dicas sobre JavaScript? Clique aqui e veja mais dicas!