Eu tenho lutado com isso por um tempo agora. Estou tentando converter época em um objeto de data. A época é enviada para mim no UTC. Sempre que você passa por new Date()
uma época, ela assume a época local. Tentei criar um objeto UTC, usando-o setTime()
para ajustá-lo à época apropriada, mas o único método que parece útil é que as toUTCString()
strings não me ajudam. Se eu passar essa string para uma nova data, ele deve notar que é UTC, mas não.
new Date( new Date().toUTCString() ).toLocaleString()
Minha próxima tentativa foi tentar obter a diferença entre a época atual local e a atual UTC, mas também não consegui.
new Date( new Date().toUTCString() ).getTime() - new Date().getTime()
Só está me dando diferenças muito pequenas, abaixo de 1000, ou seja, em milissegundos.
Alguma sugestão?
javascript
date
utc
epoch
Shane Reustle
fonte
fonte
Respostas:
Eu acho que tenho uma solução mais simples - defina a data inicial para a época e adicione unidades UTC. Digamos que você tenha uma época UTC var armazenada em segundos. Que tal
1234567890
. Para converter isso em uma data adequada no fuso horário local:d
agora é uma data (no meu fuso horário) definida comoFri Feb 13 2009 18:31:30 GMT-0500 (EST)
fonte
var d = new Date(utcSeconds * 1000)
deve produzir o mesmo resultado.var d = new Date(1234567890000)
retorna o mesmo resultadoÉ fácil,
new Date()
leva apenas milissegundos, por exemplofonte
const d = new Date(epoch * 1000)
.E apenas para os logs, fiz isso usando a biblioteca Moment.js , que eu estava usando para formatar de qualquer maneira.
fonte
O tempo da época é em segundos a partir de 1º de janeiro de 1970.
date.getTime()
retorna milissegundos a partir de 1º de janeiro de 1970, então .. se você tiver um carimbo de data / hora da época, converta-o em um carimbo de data / hora do javascript multiplicando por 1000.fonte
fonte
Para converter o tempo atual da época em [ms] para um tempo de 24 horas. Pode ser necessário especificar a opção para desativar o formato de 12 horas .
ou como JS:
Nota: O uso
en-GB
aqui é apenas uma escolha (aleatória) de um lugar usando o formato de 24 horas, não é o seu fuso horário!fonte
d/m/yyyy
ou ém/d/yyyy
? O direito (mais lógica) maneira de exibir este deve ser:yyyy-mm-dd
. Algum comprador?A hora da época (ou seja, a hora da época Unix) é quase sempre o número de segundos que expiraram desde 1º de janeiro de 1970 00:00:00 (hora UTC), não o número de milissegundos que algumas das respostas aqui implicaram.
https://en.wikipedia.org/wiki/Unix_time
Portanto, se você recebeu um valor de tempo do Unix Epoch, provavelmente será em segundos e será algo parecido
1547035195
. Se você deseja tornar esse humano legível em JavaScript, precisa converter o valor em milissegundos e passar esse valor para oDate(value)
construtor, por exemplo:Você não precisa executar a
d.setUTCMilliseconds(0)
etapa da resposta aceita porque oDate(value)
construtor JavaScript utiliza um valor UTC em milissegundos (não no horário local).https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax
Observe também que você deve evitar o uso do
Date(...)
construtor que usa uma representação de data e hora da string; isso não é recomendado (consulte o link acima).fonte
Você está apenas pedindo para converter uma string UTC em uma string "local"? Você poderia fazer:
fonte
Além da resposta acima por @djechlin
converte a hora do EPOCH em data legível por humanos. Apenas não esqueça que o tipo de tempo de EPOCH deve ser um número inteiro.
fonte
A solução mais simples que encontrei para isso é:
Observe que isso não tem o
* 1000
final danew Date(timestamp)
declaração, pois isso (para mim de qualquer maneira!) Sempre parece indicar a data errada, ou seja, em vez de indicar o ano de 2019, ele indica 51015, portanto, tenha isso em mente.fonte
Se você preferir resolver as conversões de data e hora de e para UTC e a hora local sem bibliotecas como moment.js, dê uma olhada na opção abaixo.
Para aplicativos que usam carimbos de data e hora UTC, pode ser necessário mostrar a data no navegador, considerando o fuso horário local e o horário de verão, quando aplicável. Editar uma data em um horário de verão diferente, embora no mesmo fuso horário possa ser complicado.
As extensões
Number
eDate
abaixo permitem mostrar e obter datas no fuso horário dos registros de data e hora. Por exemplo, digamos que você esteja em Vancouver, se estiver editando uma data em julho ou dezembro, isso pode significar que você está editando uma data no PST ou PDT.Eu recomendo que você verifique o snippet de código abaixo para testar esta solução.
Conversões de milissegundos
Conversões de datas
Uso
Veja você mesmo
Mostrar snippet de código
fonte
EDITAR
EDIT Fixed
fonte
Considerando, você tem
epoch_time
disponível,fonte
var myDate = new Date( your epoch date *1000);
fonte - https://www.epochconverter.com/programming/#javascript
fonte
@ Ammad, boa ideia, mas uma melhor implementação seria:
fonte
Primeiro converta-o em String e substitua o texto do fuso horário.
fonte