Conta De Menos 1 Ano - Conta De Menos 1 Ano - FDPLEARN
Conta De Menos 1 Ano - FDPLEARN

Como fazer conta de menos 1 ano na prática

A maioria das pessoas trava nisso porque tenta fazer de forma complicada. Você tem uma data e quer subtrair um ano. Em planilhas ou código, isso é simples, mas existem pegadinhas que ninguém avisa antes.

O básico da conta de menos 1 ano

Em planilhas como Excel ou Google Sheets, a função mais direta é:
=DATA(ANO(A1)-1; MÊS(A1); DIA(A1)) Isso pega a data na célula A1, subtrai 1 do ano e mantém o mês e o dia iguais. Funciona para 99% dos casos. Se você usar a função DATE (em inglês) é a mesma coisa: =DATE(YEAR(A1)-1, MONTH(A1), DAY(A1)).

Eu já vi gente usando fórmulas com DATEDIF ou convertendo para texto e depois voltando. Isso só complica. A versão acima é direto ao ponto.

O problema do 29 de fevereiro

Aqui é onde a maioria erra. Se a data original for 29/02/2024 e você subtrair 1 ano, qual é o resultado? O Excel devolve 28/02/2023. O Google Sheets faz a mesma coisa. Isso acontece porque 2023 não tem 29 de fevereiro. Para a contabilidade brasileira, isso costuma ser aceitável, mas se você está calculando prazo legal ou vencimento de contrato, pode precisar de comportamento diferente. Eu tive um caso em que um cliente precisava que datas de nascimento com 29/02 caíssem sempre em 28/02 no ano anterior, nunca em 01/03. A fórmula simples já resolvia, mas quem não presta atenção pode acabar usando =A1-365 e gerar erro de dia.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Se você precisa de um controle mais fino, use:
=SE(E(MÊS(A1)=2; DIA(A1)=29); DATA(ANO(A1)-1; 2; 28); DATA(ANO(A1)-1; MÊS(A1); DIA(A1))) Isso força o 28/02 quando a data de origem é 29/02. Custa 3 linhas a mais, mas evita retrabalho.

Em programação

Se você está em Python, a biblioteca padrão datetime não tem subtração direta de anos. O jeito é usar dateutil.relativedelta: from dateutil.relativedelta import relativedelta
nova_data = data_original - relativedelta(years=1)

Em JavaScript, o native Date não tem método de subtrair anos diretamente. O gambiarra comum é usar setFullYear(getFullYear() - 1), mas isso quebra em datas de 29/02 por causa do ajuste automático do navegador. Meu workaround foi criar uma função que verifica se a data original é 29/02 e, se for, seta manualmente para 28/02 do ano anterior antes de prosseguir. Em Java com LocalDate, é mais tranquilo: data_antiga.minusYears(1). O Java lida com 29/02 automaticamente, transformando em 28/02 quando necessário.

Quando NÃO usar essa conta

Menos 1 ano não é a mesma coisa que menos 365 dias. Se o período envolve anos bissextos no meio, a diferença pode ser de 1 dia. Para cálculos financeiros com juros ou prazos legais, use sempre subtração de ano (não de dias). A diferença é pequena, mas em auditoria ou conformidade fiscal isso aparece. Também não funciona para períodos que não são exatamente 12 meses. Se você precisa retroceder 13 meses ou 11 meses, essa lógica de "menos 1 ano" não serve. Nesses casos, use a fórmula genérica de adicionar/subtrair meses: em Python, relativedelta(months=-12); em JS, setMonth(getMonth()-12); no Excel, =DAT.MES(A1;-12).

O ideal é entender qual o objetivo antes de aplicar a fórmula. Se for só abaixar o ano mantendo o mesmo dia e mês, a solução simples resolve. Se for prazo contratual, vencimento de imposto ou cálculo de idade, confirme se o comportamento com 29/02 atende ao que a lei ou o regulamento pede.