Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Data sendo mostrada como o dia anterior

Olá!

Essa é uma pergunta meio "clássica", mas que vira e mexe ainda me pega.

Nessa aula, foi usada o new Date(pedido.entrega).toLocaleDateString() para mostrar a data de entrega do pedido (e a mesma lógica para a data em que o pedido foi feito). Isso, no entanto, mostrava a data no dia anterior (para mim, que estou localizado no Brasil). Por exemplo, na API mockada rodando na minha máquina, uma data de entrega era "2022-08-01", mas na tela aparecia 31/07/2022.

Depois de quase uma hora quebrando a cabeça (nem a ChatGPT estava conseguindo resolver comigo), chegamos à conclusão de criar uma função que faz algumas conversões para devolver a data corretamente. Segue a função:

const formataData = (data: Date) => {
    const timezoneOffset = data.getTimezoneOffset()
    data.setMinutes(data.getMinutes() + timezoneOffset) // ajuste do tempo para a máquina rodando o app
    return data.toLocaleDateString()
}
console.log(formataData(new Date("2022-08-01"))) // 01/08/2022
console.log(new Date("2022-08-01").toLocaleDateString()) // 31/07/2022

Por favor, gostaria de saber se há uma maneira mais simples para fazer isso, e se meu código está correto.

Obrigado!

1 resposta
solução!

Olá, Matheus!

Lidar com datas é sempre, por assim dizer, divertido :)

Tudo depende de como recebemos a string do backend.

O que eu posso te dizer é que, ao invés de tratarmos tudo isso na mão, vale a pena conhecer algumas libs famosas que fazem isso por nós:

Detalhe que, pra evitar isso, você indicar qual é o timezone da string que representa a data:


2022-08-01T00:00:00-03:00

Esse formato de data é o ISO 8601:

  • 2022-08-01 é a data.
  • T separa a data da hora, conforme o padrão ISO 8601.
  • 00:00:00 representa a meia-noite no horário local.
  • -03:00 indica que o horário é UTC-3, o que corresponde ao fuso horário de Brasília fora do horário de verão.