Calculadora de Idade — Idade Exata em Anos, Meses e Dias
Calculadora de idade grátis: insira sua data de nascimento para obter sua idade exata em anos, meses e dias, mais semanas totais, dias, horas e seu próximo aniversário.
Calculadora de Idade
Você nasceu em uma Monday
Próximo aniversário: 127 dias de distância (fazendo 37)
Sua idade em outras unidades
Progresso da vida
Sua idade em comparação com um intervalo de referência ilustrativo de 80 anos.
Documentação
O que é uma calculadora de idade?
Uma calculadora de idade encontra o tempo exato entre duas datas: uma data de nascimento e uma data-alvo, geralmente hoje. Ela informa o resultado em anos, meses e dias, e também como um total acumulado em meses, semanas, dias, horas, minutos e segundos. A idade também pode ser calculada para uma data passada ou futura, mostrando quantos anos uma pessoa tinha ou terá naquele dia.
Como calcular a idade
A idade é o intervalo entre duas datas do calendário. Há duas maneiras corretas de descrever esse intervalo, e ambas são úteis para finalidades diferentes.
Idade no calendário (anos, meses, dias)
Esta é a maneira cotidiana de declarar a idade, como em “33 anos, 4 meses e 5 dias de idade”. Ela é obtida em três etapas:
- Conte os anos completos transcorridos desde a data de nascimento.
- A partir do aniversário mais recente, conte os meses completos transcorridos.
- A partir daí, conte os dias restantes.
A etapa 3 fica complicada perto do fim de um mês, porque os meses não têm todos o mesmo número de dias. Uma pessoa nascida em 31 de janeiro, cuja idade é calculada em 1 de março, tem 1 mês e 1 dia de idade. Um mês depois de 31 de janeiro é 28 de fevereiro (ou 29 de fevereiro em um ano bissexto), pois não existe 31 de fevereiro. 1 de março é um dia depois disso. Esse método, às vezes chamado de regra relativedelta, em referência à biblioteca Python que o popularizou, ajusta a data do aniversário para o último dia do mês mais curto, de modo que a contagem de dias nunca fique negativa.
Tempo total transcorrido (dias, horas, segundos)
Para uma contagem precisa do tempo de vida, as duas datas são convertidas em um único ponto no tempo, e a diferença é calculada em dias completos:
em que d é o número de dias completos, t é a data-alvo e b é a data de nascimento, cada um considerado como uma contagem de milissegundos, e o divisor é o número de milissegundos em um dia.
Ambas as datas são definidas como meia-noite UTC (Tempo Universal Coordenado) antes da subtração. Isso impede que as mudanças do horário de verão adicionem ou removam uma hora e distorçam a contagem de dias. A partir do total de dias, as semanas são calculadas dividindo os dias por 7 e arredondando para baixo. As horas, os minutos e os segundos são calculados multiplicando a contagem de dias por 24, 1.440 e 86.400.
Dividir o total de dias por 365 ou 365,25 fornece uma idade aproximada em anos, mas não identifica quais anos nesse intervalo foram bissextos. A contagem pelo calendário, descrita acima, é exata. Use a idade no calendário para responder “quantos anos eu tenho”. Use o total de dias ou semanas em tarefas que exigem tempo transcorrido preciso, como definir horários de doses de medicamentos ou fazer uma contagem regressiva até um marco.
Exemplo prático
Uma pessoa nascida em 1 de janeiro de 2000, com a idade calculada em 1 de janeiro de 2020:
| Medida | Valor |
|---|---|
| Idade no calendário | 20 anos, 0 meses, 0 dias |
| Total de meses | 240 |
| Total de semanas | 1.043 |
| Total de dias | 7.305 |
| Total de horas | 175.320 |
| Total de minutos | 10.519.200 |
| Total de segundos | 631.152.000 |
| Dia da semana de nascimento | Sábado |
O total de 7.305 dias equivale a 20 × 365 mais 5 dias bissextos, correspondentes aos anos bissextos 2000, 2004, 2008, 2012 e 2016. Cada um desses anos acrescentou um dia 29 de fevereiro dentro do intervalo de 20 anos. Por isso, a contagem de dias é maior que um simples 20 × 365, e calculá-la manualmente pode facilmente resultar em um erro de alguns dias.
Fórmula de cálculo da idade em código
O método de idade no calendário acima pode ser implementado na maioria das linguagens de programação. Usar uma biblioteca de datas integrada é mais seguro do que escrever manualmente as regras de anos bissextos e da duração dos meses.
1from dateutil.relativedelta import relativedelta
2from datetime import date
3
4birth, target = date(2000, 1, 1), date(2020, 1, 1)
5
6age = relativedelta(target, birth) # calendar age
7print(f"{age.years}y {age.months}m {age.days}d")
8
9total_days = (target - birth).days # total elapsed days
10print(total_days) # 7305
111const MS_PER_DAY = 86400000;
2
3// Add n months, clamping the day to the target month's last day
4// (31 January + 1 month = 28 February). Date.UTC on its own does not
5// clamp: it would roll that date forward into March.
6function addMonthsUTC(base, n) {
7 const total = base.getUTCMonth() + n;
8 const y = base.getUTCFullYear() + Math.floor(total / 12);
9 const m = ((total % 12) + 12) % 12;
10 const lastDay = new Date(Date.UTC(y, m + 1, 0)).getUTCDate();
11 return Date.UTC(y, m, Math.min(base.getUTCDate(), lastDay));
12}
13
14function calendarAge(birth, target) {
15 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
16 + (target.getUTCMonth() - birth.getUTCMonth());
17 if (addMonthsUTC(birth, months) > target.getTime()) months -= 1;
18 const anchor = addMonthsUTC(birth, months);
19 return {
20 years: Math.floor(months / 12),
21 months: months % 12,
22 days: Math.floor((target.getTime() - anchor) / MS_PER_DAY),
23 };
24}
25
26const birth = new Date(Date.UTC(2000, 0, 1));
27const target = new Date(Date.UTC(2020, 0, 1));
28
29calendarAge(birth, target); // { years: 20, months: 0, days: 0 }
30Math.floor((target - birth) / MS_PER_DAY); // 7305
311' Whole days between two dates (A1 = birth, B1 = target):
2=B1-A1
3
4' Calendar age in complete years / months / leftover days:
5=DATEDIF(A1, B1, "y") & " years, " & DATEDIF(A1, B1, "ym") & " months, " & DATEDIF(A1, B1, "md") & " days"
6A Microsoft alerta que o argumento "md" pode retornar um número negativo ou uma contagem incorreta de
dias perto dos limites dos meses; por isso, a parte dos dias restantes dessa fórmula nem sempre concorda com a regra de ajuste descrita acima.
Dúvidas frequentes
Como descubro minha idade exata? Informe uma data de nascimento e mantenha a data-alvo como hoje. O resultado fornece a idade em anos, meses e dias, além da mesma idade em dias, semanas, horas e segundos totais.
Por que duas calculadoras de idade fornecem respostas diferentes? A diferença geralmente está na forma como os dias restantes perto do limite de um mês são contados. Uma calculadora que ajusta a data para o mês mais curto no fim do mês, como descrito acima, pode diferir em um ou dois dias de outra que simplesmente divide o tempo transcorrido por 30.
O cálculo considera os anos bissextos? Sim. A contagem total de dias inclui todos os dias 29 de fevereiro que caem entre as duas datas. Em um ano sem um dia 29 de fevereiro, o aniversário de uma pessoa nascida em um dia bissexto é considerado como 28 de fevereiro, o último dia desse mês. Uma pessoa nascida em 29 de fevereiro de 1996 tem 26 anos, 11 meses e 22 dias de idade em 20 de fevereiro de 2023, e seu próximo aniversário ocorre 8 dias depois, em 28 de fevereiro de 2023.
É possível calcular a idade para uma data passada ou futura? Sim. Definir a data-alvo como uma data futura mostra quantos anos a pessoa terá naquele dia. Defini-la como uma data passada mostra quantos anos ela tinha. A data de nascimento não pode estar no futuro, e a data-alvo não pode ser anterior à data de nascimento.
Os fusos horários afetam o resultado? Não. Ambas as datas são convertidas para meia-noite UTC antes da contagem de dias, portanto o total permanece igual independentemente da localização do usuário ou das mudanças do horário de verão.
Por que a contagem de dias é diferente da divisão dos dias por 365,25? 365,25 é apenas a duração média de um ano; não acompanha quais anos específicos do intervalo são anos bissextos de 366 dias. Contar os dias completos entre duas datas reais do calendário é exato.
Fontes
- Python
dateutil—relativedelta, a regra de meses e dias da idade no calendário descrita acima. - Plataforma Java —
Period.betweeneChronoUnit.DAYS. - Microsoft Excel — função
DATEDIF. - MDN Web Docs —
Date. - Dershowitz, N., e Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.