Como posso obter um carimbo de data / hora em JavaScript?
Algo semelhante ao carimbo de data e hora do Unix , ou seja, um único número que representa a hora e a data atuais. Como um número ou uma sequência.
Como posso obter um carimbo de data / hora em JavaScript?
Algo semelhante ao carimbo de data e hora do Unix , ou seja, um único número que representa a hora e a data atuais. Como um número ou uma sequência.
Respostas:
Curto e Snazzy:
Um operador unário como
plus
aciona ovalueOf
método noDate
objeto e retorna o carimbo de data / hora (sem nenhuma alteração).Detalhes:
Em quase todos os navegadores atuais, você pode usar
Date.now()
para obter o registro de data e hora do UTC em milissegundos ; uma exceção notável a isso é o IE8 e versões anteriores (consulte a tabela de compatibilidade ).Você pode facilmente fazer uma correção para isso, no entanto:
Para obter o registro de data e hora em segundos , você pode usar:
Ou, como alternativa, você pode usar:
O que deve ser um pouco mais rápido, mas também menos legível ( veja também esta resposta ).
Eu recomendaria usar
Date.now()
(com calço de compatibilidade). É um pouco melhor porque é mais curto e não cria um novoDate
objeto. No entanto, se você não quiser um shim e compatibilidade máxima, poderá usar o método "antigo" para obter o registro de data e hora em milissegundos :Que você pode converter para segundos como este:
E você também pode usar o
valueOf
método que mostramos acima:Registro de data e hora em milissegundos
fonte
Date.now() / 1000 | 0
sofrerá com o problema do ano 2038 ?new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Data
seja inteligente, não é legível por outros desenvolvedores.Date.now()
é mais claro e garante que todos saibam o que está acontecendo.Eu gosto disso, porque é pequeno:
Eu também gosto disso, porque é igualmente curto e é compatível com navegadores modernos, e mais de 500 pessoas votaram que é melhor:
fonte
new Date().getTime()
. Felizmente para mim, a solução mais rápida já é a solução legível!new Date().toString()
é chamado.+
operador está fazendo para que saia como uma corda?O JavaScript funciona com o número de milissegundos desde a época, enquanto a maioria dos outros idiomas trabalha com os segundos. Você poderia trabalhar com milissegundos, mas assim que passar um valor para dizer PHP, as funções nativas do PHP provavelmente falharão. Portanto, para ter certeza de que eu sempre uso os segundos, não milissegundos.
Isso fornecerá um carimbo de data / hora do Unix (em segundos):
Isso fornecerá os milissegundos desde a época (não o carimbo de data e hora do Unix):
fonte
Unix timestamp
vsSeconds since the Epoch
. Esses dois não deveriam significar a mesma coisa?fonte
(Date.now||function(){return +new Date})();
Eu forneço várias soluções com descrições nesta resposta. Sinta-se à vontade para fazer perguntas se algo não estiver claro.
PS: infelizmente, alguém mesclou isso à resposta principal sem dar crédito.
Solução rápida e suja:
Math.floor()
solução:Alguma alternativa nerd de Derek 功夫 會 功夫 extraída dos comentários abaixo desta resposta:
Polyfill para começar a
Date.now()
trabalhar:Para fazê-lo funcionar no IE, você pode fazer isso (Polyfill do MDN ):
Se você não se importa com o ano / dia da semana / horário de verão, pode retirá-lo e usá-lo após 2038:
Se você quer apenas saber o tempo relativo a partir do momento em que o código foi executado primeiro, você pode usar algo como isto:
Caso esteja usando o jQuery, você pode usar
$.now()
como descrito nos Documentos do jQuery, o que torna o polyfill obsoleto, pois$.now()
internamente faz a mesma coisa:(new Date).getTime()
Se você está feliz com a versão do jQuery, considere a possibilidade de votar nesta resposta, pois eu não a encontrei.
Agora, uma pequena explicação do que
|0
faz:Ao fornecer
|
, você instrui o intérprete a executar uma operação OR binária. As operações de bit requerem números absolutos, que transformam o resultado decimalDate.now() / 1000
em um número inteiro.Durante essa conversão, os decimais são removidos, resultando no mesmo resultado do uso,
Math.floor()
mas usando menos código.Para mais informações sobre
Date.now
siga este link:Date.now()
@ MDNfonte
Date.now()
referência: developer.mozilla.org/pt-BR/docs/JavaScript/Reference/…new Date/1e3|0
.fonte
O jQuery fornece seu próprio método para obter o registro de data e hora:
(além de apenas implementar
(new Date).getTime()
expressão)REF: http://api.jquery.com/jQuery.now/
fonte
parseInt
, pois o valor resultante será sempre aNumber
.fonte
+new Date
:) :)Date.now()
Além das outras opções, se você quiser um ISO com formato de data, poderá obtê-lo diretamente
fonte
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Apenas para adicionar, aqui está uma função para retornar uma string de carimbo de data e hora em Javascript. Exemplo: 15:06:38 PM
fonte
Data , um objeto nativo em JavaScript é a maneira como obtemos todos os dados sobre o tempo.
Apenas tenha cuidado no JavaScript, o registro de data e hora depende do conjunto do computador cliente, para que não seja um registro de data e hora 100% exato. Para obter o melhor resultado, você precisa obter o registro de data e hora do lado do servidor .
Enfim, minha maneira preferida é usar baunilha. Essa é uma maneira comum de fazer isso em JavaScript:
No MDN, é mencionado como abaixo:
Se você estiver usando uma versão abaixo do ES5,
Date.now();
não funcionará e precisará usar:fonte
Um que eu ainda não vi
Outro que eu ainda não vi é
fonte
Date.now() /1000 |0
faz o mesmo e tem sido respondida antesMath.floor()
nele, mas apenas para deixar claro que ele tem o mesmo efeito que|0
. eu não queria te machucar ou algo assim. Eu só queria lhe dizer que sua resposta de alguma forma já existe. olhando para todas as respostas dadas, há algumas que observam o piso de alguma maneira._.now()
é um pouco exagerado. Eu recomendaria apenas importar a funcionalidade Lodash que você precisa usar (neste caso, _.now () no NPM ), mas mesmo eles preteriram o pacote em favor do usoDate.now()
.O
Date.getTime()
método pode ser usado com um pequeno ajuste:Divida o resultado por 1000 para obter o registro de data e hora do Unix,
floor
se necessário:O
Date.valueOf()
método é funcionalmente equivalente aDate.getTime()
, o que torna possível usar operadores aritméticos no objeto date para obter resultados idênticos. Na minha opinião, essa abordagem afeta a legibilidade.fonte
new Date().getTime() / 1000
()
depoisnew Date
e,.getTime()
desde então/
, converterá o objeto Date em um número.O código
Math.floor(new Date().getTime() / 1000)
pode ser reduzido paranew Date / 1E3 | 0
.Considere pular a
getTime()
chamada direta e usá-la| 0
como um substituto para aMath.floor()
função. Também é bom lembrar que1E3
é um equivalente mais curto para1000
(E maiúsculo é preferido que minúsculo para indicar1E3
como constante).Como resultado, você obtém o seguinte:
fonte
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
37 -14 = 23 bytes;Math.floor()
por|0
está tornando este código "claro e compreensível". Explique-me qual é o ponto de salvar 1 byte substituindo1000
por1E3
. Isto é ridículo. Eu vejo código incorreto.atuação
Hoje - 2020.04.23 Realizo testes para soluções escolhidas. Testei no MacOs High Sierra 10.13.6 no Chrome 81.0, Safari 13.1, Firefox 75.0
Conclusões
Date.now()
(E) é a mais rápida no Chrome e Safari e a segunda no Firefox, e provavelmente é a melhor opção para uma solução rápida entre navegadoresperformance.now()
(G), o que é surpreendente, é mais do que 100x mais rápida que outras soluções no Firefox, mas mais lenta no ChromeDetalhes
Resultados para chrome
Você pode executar o teste em sua máquina AQUI
O código usado nos testes é apresentado no snippet abaixo
Mostrar snippet de código
fonte
performance.now()
, pois é o mais preciso em termos de carimbo.privacy.reduceTimerPrecision
que arredonda os resultados para o milissegundo mais próximo. Também é ativado por padrão, mas pode ser desativado. developer.mozilla.org/pt-BR/docs/Web/API/Performance/nowEu recomendo usar
moment.js
. Para obter o número de milissegundos desde a época do UNIX, façaPara obter o número de segundos desde a época do UNIX, faça
Você também pode converter horários da seguinte forma:
Eu faço isso o tempo todo. Sem trocadilhos.
Para usar
moment.js
no navegador:Para obter mais detalhes, incluindo outras maneiras de instalar e usar o MomentJS, consulte seus documentos.
fonte
Para um registro de data e hora com resolução de microssegundos, há
performance.now
:Isso poderia, por exemplo
1436140826653.139
, render , enquantoDate.now
apenas dá1436140826653
.fonte
Você só pode usar
para obter o registro de data e hora atual. Não há necessidade de fazer nada extra.
fonte
Aqui está uma função simples para gerar registro de data e hora no formato: mm / dd / aa hh: mi: ss
fonte
(new (chain (-date) (to-i-s-o-string)))
.fonte
Qualquer navegador não suportado Date.now, você pode usá-lo para obter a data e hora atuais:
fonte
Date.now
realmente existe (e é uma função), antes de tentar invocá-lo:currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.Este aqui tem uma solução: que converte carimbo unixtime para tim em js tente isso
fonte
Aprendi uma maneira muito legal de converter um determinado objeto Date em um carimbo de data / hora Unix a partir do código fonte do JQuery Cookie outro dia.
Aqui está um exemplo:
fonte
Se você deseja uma maneira básica de gerar um carimbo de data / hora no Node.js, isso funciona bem.
Nossa equipe está usando isso para interromper o cache em um ambiente de host local. A saída é
/dist/css/global.css?v=245521377
onde245521377
está o registro de data e hora gerado porhrtime()
.Espero que isso ajude, os métodos acima também podem funcionar, mas eu achei a abordagem mais simples para as nossas necessidades no Node.js.
fonte
Isso parece funcionar.
fonte
Se for para fins de registro, você pode usar o ISOString
new Date().toISOString()
fonte
Para usuários lodash e sublinhado , use
_.now
.fonte
O Moment.js pode abstrair muita dor ao lidar com datas Javascript.
Consulte: http://momentjs.com/docs/#/displaying/unix-timestamp/
fonte
moment().valueOf()
. Veja minha resposta.No momento em que escrevemos isso, a resposta principal tem 9 anos e muita coisa mudou desde então - não menos importante, temos suporte quase universal para uma solução não-hacky:
Se você quiser ter certeza absoluta de que isso não será interrompido em algum navegador antigo (pré ie9), poderá colocá-lo atrás de uma verificação, como:
Isso retornará os milissegundos desde o tempo da época, é claro, não segundos.
Documentação MDN em Date.now
fonte
maneira mais simples:
fonte
event
vem. Você precisa dar uma explicação melhor da maneira como a resolve, em vez de escrever uma resposta. Por favor!