Voltar para o Blog
4 min read

Como calcular a idade em JavaScript (DOB para anos, meses, dias)

Aprenda maneiras práticas de calcular a idade a partir da data de nascimento em JavaScript. Inclui anos, meses e dias exatos, uma opção de data e armadilhas comuns, como fusos horários e anos bissextos.

Como calcular a idade em JavaScript (DOB para anos, meses, dias)

Se você precisar calcular a idade de uma pessoa a partir da data de nascimento (DOB) em JavaScript, poderá fazer isso de algumas maneiras diferentes. A chave é decidir o que você quer dizer com idade:

  • Idade em anos completos (mais comum)
  • Idade exata (anos, meses, dias)
  • Idade em uma data específica (nem sempre hoje)

1) Calcular idade em anos completos (simples e correto)

Esta é a abordagem padrão: subtraia os anos e ajuste se o aniversário ainda não aconteceu este ano.

function ageInYears(dob, asOf = new Date()) {
  const nascimento = nova data(dob);
  const ref = nova data (asOf);

  deixe anos = ref.getFullYear() - nascimento.getFullYear();
  const m = ref.getMonth() - nascimento.getMonth();

  if (m < 0 || (m === 0 && ref.getDate() < nascimento.getDate())) {
    anos--;
  }

  anos de retorno;
}

Exemplo: Data de nascimento 10/02/2000 e em 09/02/2026 dá 25 (aniversário amanhã).

2) Calcule a idade exata (anos, meses, dias)

Se quiser um detalhamento exato, você pode calcular primeiro os anos, depois os meses e depois os dias, "pegando emprestado" do mês anterior, quando necessário.

function exactAge(dob, asOf = new Date()) {
  const nascimento = nova data(dob);
  const ref = nova data (asOf);

  deixe anos = ref.getFullYear() - nascimento.getFullYear();
  deixe meses = ref.getMonth() - nascimento.getMonth();
  deixe dias = ref.getDate() - nascimento.getDate();

  // Ajusta os dias emprestando do mês anterior
  if (dias < 0) {
    const mês anterior = nova data (ref.getFullYear(), ref.getMonth(), 0); //dia 0 = último dia do mês anterior
    dias += mêsprev.getDate();
    meses--;
  }

  // Ajustar meses tomando empréstimos do ano anterior
  if (meses < 0) {
    meses += 12;
    anos--;
  }

  return {anos, meses, dias};
}

Observação: Casos extremos de data do mês (como um DOB no dia 31) exigem testes cuidadosos. Se você precisar de algo robusto em todas as localidades e casos extremos, considere usar uma biblioteca de datas bem testada.

3) Use uma data "a partir de" para a idade em uma data passada ou futura

Muitos apps precisam da idade em uma data de referência específica (seguro, regras de elegibilidade, limites do ano letivo). Ambas as funções acima aceitam um parâmetro asOf, então você pode fazer:

ageInYears('1995-06-20', '2030-01-01');
idade exata('20/06/1995', '01/01/2030');

Armadilhas comuns (e como evitá-las)

  • Fusos horários: a análise de AAAA-MM-DD pode se comportar de maneira diferente entre ambientes. Se você se preocupa apenas com a data, crie a data no horário local: new Date(year,monthIndex, day).
  • Aniversários em dias bissextos: decida sua regra para 29 de fevereiro em anos não bissextos (28 de fevereiro ou 1º de março). Seja consistente.
  • Entradas inválidas: validam que o DOB é uma data real e não no futuro.

Opção rápida: use a calculadora de idade on-line

Se vocêsó precisa da resposta (ou deseja validar sua implementação), use nossa calculadora gratuita: Calcular Idade Online.

Guias relacionados

Perguntas frequentes

Qual é a maneira mais precisa de calcular a idade?

Para a maioria dos casos, “anos completos” (idade em anos inteiros) é o padrão. Se você precisar de um detalhamento completo, calcule primeiro os anos, depois os meses e depois os dias, e teste casos extremos, como duração do mês e anos bissextos.

Por que o JavaScript às vezes informa o dia errado para uma string de data?

Porque new Date('YYYY-MM-DD') pode ser interpretado como UTC em alguns ambientes. Se você se preocupa com a data do calendário local, analise as partes e use new Date(y, m, d).