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. Vamos calcular idade pela data de nascimento usando JavaScript.
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'));