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

adicionar mais horas ou dias a uma data em JavaScript capa

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
Formação Recomendada

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

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

3 Comentários
Oldest
Newest Most Voted
Paulo Freire

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));

Last edited 4 anos atrás by Paulo Freire
Julio Stricker

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 🙂

hawkz0r

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/

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares