TransWikia.com

Date vindo com data de amanha em vez de hoje

Stack Overflow em Português Asked by Shintaro Kisaragi on February 1, 2021

O meu date esta vindo com a data errada, ta vindo a data de amanha mais eu quero a data de hoje. Para a minha aplicação a data e a hora não podem estar erradas.
Ja verifiquei a data no servidor e esta correta:
data que devia vir: 2020-05-29T24:47:00
data que esta vindo: 2020-05-30T02:21:04
Ele esta a 1 dia e algumas horas adiantado e não estou conseguindo arrumar

Codigo(Ele roda no NodeJS no Servidor):

var agora = new Date().toISOString().replace(/..+/, '')

desde já agradeço a ajuda

One Answer

Update

A resposta original foi escrita inicialmente utilizando o método Date.prototype.toLocaleDateString() que podia exibir data e horário numa mesma chamada.
Na época em que foi escrito o código funcionava bem, porém com a evolução da tecnologia e constante adequação dos navegadores as recomendações da WC3 hoje a antiga funcionalidade do método Date.prototype.toLocaleDateString() foi transferida para o método Date.prototype.toLocaleString().
Atualmente o método Date.prototype.toLocaleDateString() apenas exibe datas enquanto o método Date.prototype.toLocaleTimeString() apenas exibe o horário.

Aparentemente a sua data não está vindo errada, você está tendo problemas com o fuso horário. Quando usa a função toISOString() você está retornando uma string em formato ISO 8601 cujo o fuso horário é Meridiano de Greenwich que é mesmo que [UTC zero] 5

Para corrigir o problema você deve obter essa string usando um método que retorne uma versão temporal e culturalmente localizada desse horário e data. Em javascript esse método é toLocaleString().

O método toLocaleString() retorna uma string com a representação culturalmente localizada do horário e data.
O método aceita dois parâmetros:

Veja os exemplos:

//Cria uma objeto Date contendo a hora e a data atual. 
let dataAtual = new Date();

//Data e hora no Meridiano de Greenwich(da forma que estava fazendo)
console.log(`Data e hora no Meridiano de Greenwich ${dataAtual.toISOString()}`);

//Data e hora na minha cidade
console.log(`Data Hora em Campo Grande ${dataAtual.toLocaleString("pt-Br",{
  dateStyle: "short",
  timeStyle: "short",
  timeZone: "America/Campo_Grande"
})}`);

//Data e hora em São Paulo
console.log(`Data Hora em São Paulo ${dataAtual.toLocaleString("pt-Br",{
  dateStyle: "short",
  timeStyle: "short",
  timeZone: "America/Sao_Paulo"
})}`);

//Somente a data em Manaus
console.log(`Data em Manus ${dataAtual.toLocaleString("pt-Br",{
  dateStyle: "short",
  timeZone: "America/Manaus"
})}`);

//Somente a hora em Fernando de Noronha
console.log(`Hora em Fernando de Noronha ${dataAtual.toLocaleString("pt-Br",{
  timeStyle: "short",
  timeZone: "America/Noronha"
})}`);

//Data e hora completa em Palmas
console.log(`Data Hora em Palmas ${dataAtual.toLocaleString("pt-Br",{
  dateStyle: "full",
  timeStyle: "full",
  timeZone: "America/Araguaina"
})}`);

Documentação adicional: Banco de dados de fusos horários IANA: https://www.iana.org/time-zones

Answered by Augusto Vasques on February 1, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP