Como pegar a data de ontem com JavaScript

Neste artigo você vai aprender a como pegar a data de ontem com JavaScript, utilizando o objeto Date e suas funções

pegar a data de ontem com JavaScript capa

Fala programador(a), beleza? Bora aprender mais sobre datas e JavaScript!

Para começar a criar as datas vamos precisar do objeto Date, que vai criar uma data atual, ou seja, de hoje

Após isso vamos fazer uma subtração desta data atual de 1 dia

E por fim podemos instanciar um novo objeto a partir desta resultado e formatar com toLocaleDateString

Veja o exemplo completo com códigos:

const currentDate = new Date();

console.log(currentDate.toLocaleDateString()) // "31/07/2022" 

const yesterday = new Date(currentDate.setDate(currentDate.getDate() - 1));

console.log(yesterday.toLocaleDateString()) // "30/07/2022"

Perceba que criamos a nova data com o objeto Date, e colocamos em uma variável

Depois é exibida a data atual com o toLocaleDateString

E então criamos a nossa nova data com a subtração de um dia

Por fim é exibida a data de ontem, o que achou? 🙂

Conclusão

Neste artigo você viu como pegar a data de ontem com JavaScript

Utilizamos Date e seus métodos para isso

A grande jogada foi subtrair um dia da data atual, gerando um valor em ms da data de ontem

Confira nossos cursos gratuitos no Youtube, com vídeos todos os dias! Se inscreva e ative o sininho para receber as notificações e aprender mais ainda sobre desenvolvimento web!

Veja também nosso catálogo de cursos na Udemy, todos com exercícios e projetos práticos, nas mais diversas tecnologias. O link acima contém um cupom de desconto para os curso

Formação Vibe Coding
Formação Recomendada

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Resposta rápida: como pegar a data de ontem em JavaScript:

Pega a data de hoje com new Date(), subtrai 1 do dia com setDate(getDate() - 1) e formata com toLocaleDateString()

Em uma linha só, se tu quiser copiar e sair rodando:

const ontem = new Date(new Date().setDate(new Date().getDate() - 1))

console.log(ontem.toLocaleDateString('pt-BR'))

O porquê disso funcionar é o mais legal: o setDate aceita valores fora do intervalo do mês, então ele mesmo resolve a virada de mês e de ano pra você

Agora bora entender cada pedaço, e ver os detalhes que costumam quebrar na hora de usar isso de verdade

As datas que aparecem nos comentários acima são só o dia em que aquele exemplo foi executado

Se você rodar esse código agora, vai ver o SEU hoje e o SEU ontem, no fuso da sua máquina

O valor muda, a lógica não muda

E se a saída vier em outro formato (tipo mês antes do dia), não é bug: o toLocaleDateString() sem argumento nenhum segue a configuração de idioma do ambiente

Pra travar o formato brasileiro, passe o locale:

console.log(yesterday.toLocaleDateString('pt-BR'))

Tome cuidado: o setDate altera a data original:

Esse é o pega que derruba muita gente

O setDate NÃO devolve uma data nova, ele modifica o objeto em que foi chamado e retorna o valor em milissegundos

Ou seja: depois daquela linha, a variável currentDate também virou ontem

Se liga:

const currentDate = new Date()

const yesterday = new Date(currentDate.setDate(currentDate.getDate() - 1))

console.log(yesterday.toLocaleDateString('pt-BR'))
console.log(currentDate.toLocaleDateString('pt-BR')) // virou ontem também!

No exemplo do artigo isso não atrapalha, porque a data de hoje já tinha sido exibida antes

Mas se você precisa das DUAS datas depois (hoje e ontem), faça uma cópia antes de subtrair:

const hoje = new Date()

const ontem = new Date(hoje) // cópia, objeto novo
ontem.setDate(ontem.getDate() - 1)

console.log(hoje.toLocaleDateString('pt-BR'))
console.log(ontem.toLocaleDateString('pt-BR'))

Agora cada variável tem a sua data, sem uma pisar na outra 🙂

Como pegar a data de ontem no formato YYYY-MM-DD:

Esse é o formato que quase todo input type="date", API e banco de dados espera

A tentação é usar o toISOString() e cortar a string, porém tem uma armadilha aí

O toISOString() sempre converte pro UTC, e não pro relógio da sua máquina

No Brasil, que está atrás do UTC, rodar isso no fim da noite pode devolver o DIA SEGUINTE, e você vai passar meia hora achando que errou a conta haha

O caminho seguro é montar a string com os métodos locais:

function paraISO(data) {
const ano = data.getFullYear()
const mes = String(data.getMonth() + 1).padStart(2, '0')
const dia = String(data.getDate()).padStart(2, '0')

return `${ano}-${mes}-${dia}`
}

const ontem = new Date()
ontem.setDate(ontem.getDate() - 1)

console.log(paraISO(ontem)) // ex: 2026-08-05

E que + 1 é esse no mês?

O getMonth() conta a partir do zero (janeiro é 0, dezembro é 11)

Já o getDate() é normal, começa no 1

O padStart(2, '0') só garante o zero à esquerda, pra virar 05 no lugar de 5

E se eu quiser anteontem, ou 7 dias atrás?

A lógica é exatamente a mesma, muda só o número que você subtrai

Então vale a pena deixar isso em uma função reutilizável:

function diasAtras(dias) {
const data = new Date()
data.setDate(data.getDate() - dias)

return data
}

console.log(diasAtras(1).toLocaleDateString('pt-BR')) // ontem
console.log(diasAtras(2).toLocaleDateString('pt-BR')) // anteontem
console.log(diasAtras(7).toLocaleDateString('pt-BR')) // uma semana atrás

E pra frente também funciona, é só passar um número negativo:

console.log(diasAtras(-1).toLocaleDateString('pt-BR')) // amanhã

Uma função, e você resolveu ontem, anteontem, semana passada e amanhã de uma vez só

Funciona na virada de mês e de ano?

Funciona, e essa é a melhor parte do setDate 😀

Você não precisa checar se o mês tem 30, 31 ou 28 dias, nem tratar ano bissexto na mão

Se o resultado ficar fora do intervalo do mês, o próprio objeto Date ajusta:

const data = new Date(2026, 0, 1) // 1 de janeiro de 2026
data.setDate(data.getDate() - 1)

console.log(data.toLocaleDateString('pt-BR')) // 31/12/2025

Repare que o mês voltou pra dezembro e o ano voltou junto, sem uma linha de if

Por isso subtrair com setDate é mais seguro do que sair fazendo conta com milissegundos na mão

Pegando ontem à meia-noite (pra filtros e comparações):

Um detalhe que passa batido: o objeto Date carrega HORA junto

Então "ontem" criado a partir de agora vem com o horário de agora, e comparar duas datas assim quase nunca dá o resultado que você espera

Pra zerar o horário e ter o começo do dia de ontem:

const ontem = new Date()
ontem.setDate(ontem.getDate() - 1)
ontem.setHours(0, 0, 0, 0) // hora, minuto, segundo e ms

console.log(ontem.toString())

Se você precisa do intervalo inteiro do dia de ontem (pra um filtro de "o que aconteceu ontem"), pegue o começo de ontem e o começo de hoje:

const inicioDeHoje = new Date()
inicioDeHoje.setHours(0, 0, 0, 0)

const inicioDeOntem = new Date(inicioDeHoje)
inicioDeOntem.setDate(inicioDeOntem.getDate() - 1)

Aí é só filtrar o que está entre os dois, sem sobra e sem furo

Perguntas frequentes sobre a data de ontem em JavaScript:

Como pegar a data de ontem em JavaScript?

Crie a data de hoje com new Date() e subtraia um dia com setDate(getDate() - 1). Depois formate com toLocaleDateString('pt-BR') pra exibir no padrão brasileiro

Preciso instalar alguma biblioteca pra isso?

Não, o objeto Date já é nativo do JavaScript, roda no navegador e no Node sem instalar nada

Por que a data mudou de mês sozinha?

Não mudou sozinha, foi o setDate ajustando a virada: se o resultado cai fora do mês, o Date recalcula mês e ano automaticamente

Por que a minha data de hoje sumiu depois da subtração?

Porque o setDate altera o objeto original. Faça uma cópia com new Date(dataOriginal) antes de subtrair

Como pegar a data de ontem no formato do input date?

Monte a string YYYY-MM-DD com getFullYear, getMonth() + 1 e getDate, usando padStart(2, '0'). Evite o toISOString(), porque ele trabalha em UTC e pode devolver outro dia dependendo do horário

Leia também

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

Formações

Formação SAAS com IA

Formação SAAS com IA

Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!

  • 291 aulas
  • 18 projetos
  • 24h 17min

Blog | Mais populares