Como adicionar mais horas ou dias a uma data em JavaScript
Neste artigo você vai aprender como adicionar mais horas ou dias a uma data em JavaScript, ou seja, manipular datas em JavaScript

Fala programador(a), beleza? Bora aprender mais sobre como adicionar horas e manipular datas em JavaScript!
A notícia boa é que a linguagem já prepara muito bem o meio de campo para nós
Adicionar horas é possível por meio de um método chamado setHours, do objeto/classe Date
Então devemos instanciar um nova data com Date, para poder utilizar seus métodos auxiliares e manipular horários
Veja um exemplo prático:
var data = new Date(); console.log(data.getHours()); // 9 data.setHours(data.getHours() + 3); console.log(data.getHours()); // 12
Perceba que pegamos as horas da data criada pelo Date pelo getHours e adicionamos 3 horas com um inteiro
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 48min
Desta forma ao pegar a data novamente, as horas estarão acrescidas
O método setHours foi responsável por este incremento de horas ao valor original da data
Para adicionar dias as datas é bem parecido com a forma de adicionar horas, veja um exemplo:
var data = new Date(); console.log(data.getDate()); // 14 data.setDate(data.getDate() + 5); console.log(data.getDate()); // 19
Só que aqui vamos utilizar os métodos getDate e setDate, para pegar os dias e modificar os dias respectivamente
Conclusão
Neste artigo vimos como adicionar mais horas ou dias a uma data em JavaScript
Utilizamos os métodos getHours e getDate, para pegar as horas e os dias
E o método setHours e setDate, para modificar estes valores
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube
E se os dias passarem do fim do mês?

VPS Hostinger para seu sistema
10% OFF extraVPS com SSD NVMe e backups semanais. O cupom MATHEUSHORADECODAR é aplicado automaticamente pelo link.
Ver planos com 10% OFF →Essa é a dúvida que bate na hora que tu roda o código num dia 30, né?
A boa notícia: o Date faz a virada sozinho, tu não precisa ficar contando quantos dias tem cada mês
const data = new Date(2026, 0, 30) // 30 de janeiro
data.setDate(data.getDate() + 5)
console.log(data.getDate()) // 4
console.log(data.getMonth()) // 1
Ou seja, a data virou 4 de fevereiro sem esforço nenhum, legal né? 😀
E se liga nesse detalhe que já derrubou muita gente: o getMonth começa do zero, então 0 é janeiro, 1 é fevereiro e por aí vai
Vale a mesma lógica pro setHours: se tu somar horas e estourar as 24, o dia é empurrado pra frente automaticamente
Cuidado: a data original é modificada
O setHours e o setDate não devolvem uma data nova
Eles alteram o próprio objeto que tu criou, e isso aparece no primeiro exemplo do artigo: depois do setHours, a mesma variável já responde com o valor novo
Se você precisa manter a data original intacta (pra comparar antes e depois, por exemplo), faça uma cópia antes de mexer:
const data = new Date()
const dataFutura = new Date(data.getTime()) // cópia da data original
dataFutura.setDate(dataFutura.getDate() + 5)
console.log(data.getDate()) // continua a data de hoje
console.log(dataFutura.getDate()) // cinco dias na frente

Crie sistemas com IA para vender
Prompts, modelos e checklists para criar e publicar seu sistema com IA e preparar a oferta para o primeiro cliente.
Quero o e-book gratuito Receba o livro e os bônus no seu e-mail.O getTime devolve o valor da data em número, e o Date consegue montar uma data nova a partir dele
Tome cuidado com isso em array de datas, é o tipo de bug que só aparece na tela do usuário 😛
E para subtrair horas ou dias?
Mesma receita, só que com número negativo
Não existe um removeHours ou coisa parecida, tu continua no setHours e no setDate
const data = new Date()
data.setHours(data.getHours() - 3) // três horas atrás
data.setDate(data.getDate() - 7) // uma semana atrás
E a virada funciona pros dois lados: se cair antes do dia 1, o mês anterior entra sozinho na conta
Bora testar aí no console?
Minutos, meses e anos: o padrão é sempre o mesmo
Sacou a lógica do get + set? Então tu já sabe mexer no resto todo
O objeto Date segue o mesmo par pra cada pedaço da data:
- getMinutes e setMinutes, para os minutos
- getSeconds e setSeconds, para os segundos
- getMonth e setMonth, para o mês (lembrando: começa no zero)
- getFullYear e setFullYear, para o ano
A receita é sempre a mesma: pega o valor atual com o get, soma ou subtrai o que tu quer, e joga de volta com o set
const data = new Date()
data.setMinutes(data.getMinutes() + 30)
data.setMonth(data.getMonth() + 2)
data.setFullYear(data.getFullYear() + 1)
Um padrão só pra memorizar, massa demais isso
Ah, e uma dica de frescor pro seu código: os exemplos aqui usam var porque é o clássico, mas no dia a dia prefira const, já que a variável da data não precisa ser reatribuída pra ser modificada por dentro
O comportamento dos métodos é exatamente o mesmo, muda só a forma de declarar
Leia também
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 30min
Blog | Mais populares
As diferenças de var, let e const

Como redirecionar para outra página com JavaScript
Exercícios de lógica de programação JavaScript com gabarito
Pratique lógica com JavaScript resolvendo um exercício antes de abrir o gabarito. Execute o código, teste uma entrada comum e um caso de borda, como […]

Mano. legal mas se você acrecenta um dia ao dia 28/02/2021, lo lugar de 01/02/2021 ele iria ficar 29/02/2021? tipo só está setando o dia somado sem ter controle de como realmente vai ficar a data?
mano eu fiz o seguinte. somei usando o tempo em milisegundos, por que assim eu posso somar a data sem me preocupar se é o ultimo dia do mes. que mes é. se o ano é bissexto. etc.
var date= new Date();
var day = SECONDS_PER_MINUTE* MILI_SECONDS_PER_SECOND*MINUTES_PER_HOUR*HOURS_PER_DAY;
var anotherDay = new Date((date.getTime() + day));
pensei a mesma coisa… e quando é o último dia do mês…. o certo é trabalhar as somas desejadas em cima do Date() e não como se fossem manipular number aleatórios.
Vou tentar sua abordagem, obrigado 🙂
Ambos estão errados, o JS sabe lidar com esse tipo de situação e faz os ajustes necessários. Por favor, não fiquem dando ideia errada sem testar antes.
Teste: https://jsfiddle.net/q92j3huw/