Calculadora de Soma/Subtração de Datas
Adiciona ou subtrai dias, semanas, meses, anos de uma data
Adicionar ou subtrair dias de uma data
O que é uma Calculadora de Soma/Subtração de Datas?
Uma calculadora de soma ou subtração de datas encontra uma data-alvo movendo uma data inicial para frente ou para trás por dias, semanas, meses ou anos. Ela ajuda em renovações, retornos, prazos contratuais, garantias, lembretes e planejamento de projetos sem contar tudo manualmente no calendário. A parte mais delicada não é somar dias, mas lidar com os limites reais do calendário: meses têm tamanhos diferentes, anos bissextos alteram fevereiro e uma data como 31 de janeiro nem sempre existe no mês seguinte. A ferramenta fornece um resultado prático para planejamento rápido. Ela conta tempo de calendário, não dias úteis, feriados, regras regionais ou prazos legais específicos.
Como usar
Como usar
- Insira a data de início
- Selecione adicionar (para frente) ou subtrair (para trás)
- Insira o valor e selecione uma unidade (day/week/month/year)
- Clique em 'Calculate result' para ver a data resultante
Regras de data
- Cálculos de meses e anos podem cair em meses mais curtos; verifique como sua regra de negócio lida com datas como 31 de janeiro mais um mês.
- Para prazos, confirme se fins de semana, feriados ou cortes de fim de dia devem alterar a data final.
Casos de uso
Princípio técnico
A aritmética de datas nesta ferramenta é construída sobre o calendário gregoriano proléptico conforme implementado pelo objeto Date do ECMAScript. Os meses em JavaScript são indexados a partir de zero (janeiro é 0, dezembro é 11), o que é a maior fonte de erros de deslocamento em código de datas. Adicionar dias é simples: new Date(d.getTime() + n * 86_400_000). Adicionar meses é mais difícil porque os meses têm 28, 29, 30 ou 31 dias: o padrão date.setMonth(date.getMonth() + n) transborda quando o mês resultante é mais curto que o dia de origem, então 31 de janeiro + 1 mês produz 3 de março em vez de 28 de fevereiro (o motor carrega os 3 dias extras para março). Esta ferramenta detecta o transbordo comparando date.getMonth() após setMonth e limita o dia ao último dia do mês de destino quando necessário, seguindo o comportamento de moment.js, date-fns e Plain Date.add() do Temporal. Os anos bissextos seguem a regra gregoriana padrão: um ano é bissexto se divisível por 4, exceto os séculos, que devem ser divisíveis por 400. Então 1900 e 2100 são anos comuns, enquanto 2000 foi bissexto e 2024 também. Isso é relevante sempre que um cálculo atravessa 29 de fevereiro: 29 de janeiro + 1 mês + 1 mês em 2023 dá 29 de março, mas em 2024 o transbordo atinge 29 de fevereiro (uma data válida) e depois 29 de março, sem necessidade de limitação. O corte de 1582 para a transição juliana-gregoriana é ignorado aqui porque o calendário gregoriano proléptico estende as regras indefinidamente para o passado; datas anteriores a 15 de outubro de 1582 são tecnicamente anacrônicas, mas ainda calculam corretamente para fins modernos. O tratamento de fuso horário é uma dimensão separada: o Date armazena um instante UTC internamente e aplica o fuso horário IANA do sistema (ex.: America/New_York, Asia/Shanghai) apenas ao chamar .getDate(), .getMonth() ou .toLocaleString(). Seguem-se dois problemas: (1) uma data construída a partir de uma string ISO sem sufixo Z ("2026-06-10") é interpretada como meia-noite UTC, mas "2026-06-10T00:00:00" sem o Z é interpretada como meia-noite horário local, e a mesma date.getDate() pode retornar 9 ou 10 dependendo do offset do usuário; (2) as transições de horário de verão na primavera (pulam 02:00-03:00) e no outono (repetem 01:00-02:00) tornam alguma aritmética ambígua, então uma adição de "+24 horas" pode cair em um relógio de parede que está 23 ou 25 horas adiante. Para aritmética de dias úteis, dias da semana ou com feriados, o resultado do calendário deve ser pós-processado contra uma lista de feriados específica da região (ex.: através do pacote npm date-holidays ou um calendário personalizado) em vez de depender do transbordo simples.
- Os meses do JS Date são indexados a partir de zero: Janeiro = 0, Dezembro = 11; o erro de deslocamento é o mais comum.
- Transbordo de setMonth: 31 de jan + 1 mês dá 3 de mar, não 28 de fev; a ferramenta limita ao fim do mês comparando getMonth() após setMonth.
- Ano bissexto: divisível por 4, exceto anos de século que devem ser divisíveis por 400 (então 1900 não, 2000 sim, 2024 sim).
- ISO 8601 sem Z ("2026-06-10T00:00:00") interpreta como horário local; com Z é UTC — getDate() pode retornar dias diferentes.
- Transições de horário de verão criam dias de 23 e 25 horas; a adição de +24 nem sempre equivale a +1 dia de calendário.
- Cálculo em nível de dias é exato via getTime() + n * 86_400_000; unidades maiores cascateiam por setMonth/setFullYear com limitação.
- Aritmética de dias úteis e com feriados deve ser adicionada por cima via tabela de calendário específica da região — não está no motor.
Exemplos
Adicionar 90 dias a uma data inicial (trial / revisão de OKR)
Start date : 2026-01-15 (Quinta-feira)
Operation : + 90 dias
Result : 2026-04-15 (Quarta-feira)
Use case : Fim de período de trial de 90 dias, revisão de OKR do Q1Subtrair 6 meses de hoje
Start date : 2026-06-11
Operation : - 6 meses
Result : 2025-12-11
Use case : Olhar seis meses para trás para análise de renovação ou churnAdicionar 2 anos 3 meses 5 dias (validade de visto)
Start date : 2026-01-15
Step 1 : + 2 anos -> 2028-01-15
Step 2 : + 3 meses -> 2028-04-15
Step 3 : + 5 dias -> 2028-04-20
Result : 2028-04-20Virada de fim de mês: 31 Jan + 1 mês
Start date : 2026-01-31
Operation : + 1 mês
Result : 2026-02-28 (fevereiro tem 28 dias em 2026)
Verificação de ano bissexto:
Start date : 2028-01-31
Operation : + 1 mês
Result : 2028-02-29 (2028 é ano bissexto)Subtrair 14 dias para um lembrete de cobrança
Subscription renewal : 2026-07-01
Operation : - 14 dias
Send reminder on : 2026-06-17Perguntas frequentes
Como funciona somar 'meses' em datas no fim do mês?
Os meses não têm todos a mesma quantidade de dias, então somar 1 mês a 31 de janeiro é ambíguo. A calculadora segue a convenção padrão: limita ao último dia do mês de destino — 31 de janeiro + 1 mês = 28 de fevereiro (ou 29 em anos bissextos). Isso corresponde à função EDATE do Excel.
Finais de semana e feriados são contados?
Por padrão, sim — 'somar 5 dias' soma 5 dias corridos. Para cálculos em dias úteis (pulando finais de semana e, opcionalmente, feriados) use a ferramenta dedicada 'Calculadora de Dias Úteis'; esta página é para aritmética de calendário pura.
Posso somar anos, meses, semanas e dias de uma só vez?
Sim. O resultado os aplica na ordem anos → meses → semanas → dias, que é a convenção usada pela maioria das bibliotecas de data, incluindo a proposta Temporal do JavaScript. Essa ordem importa: '1 mês e 30 dias' somados a 1 de janeiro caem em uma data diferente de '30 dias e 1 mês'.
Como ela lida com o horário de verão?
O cálculo opera sobre datas de calendário, não sobre tempo absoluto, então somar 'um dia' atravessando uma transição de horário de verão ainda produz o mesmo horário do dia no fuso local. Se você precisa de aritmética com precisão de 24 horas, troque a unidade para horas em vez de dias.
Qual é o intervalo de datas suportado?
O Date do JavaScript cobre ±100.000.000 dias a partir de 1970, o que vai aproximadamente do ano -271.821 ao 275.760. A calculadora lida com qualquer data histórica ou no futuro distante dentro desse intervalo. Para datas anteriores à reforma do calendário gregoriano (1582), atenção: os calendários civis locais divergem.
Por que subtrair duas datas é diferente de somar dias negativos?
Não é diferente — subtrair N dias é o mesmo que somar -N. Se você quer a diferença entre duas datas, use a ferramenta 'Diferença entre Datas'. Esta página é aritmética unidirecional: data inicial mais ou menos uma duração.
Meus dados são enviados para algum servidor?
Não. O cálculo roda no seu navegador. Os campos são apagados quando você atualiza a página.