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 45min
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?
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
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 27min
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
Quais são os melhores exercícios lógica de programação JavaScript? Colocar em prática os exercícios de lógica de programação em JavaScript é de extrema importância para […]

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/