Como posso obter segundos desde a época em Javascript?

152

No Unix, eu posso correr date '+%s'para obter a quantidade de segundos desde a época. Mas preciso consultá-lo no front-end do navegador, não no back-end.

Existe uma maneira de descobrir segundos desde a época em JavaScript?

Alice
fonte

Respostas:

246
var seconds = new Date() / 1000;

Ou, para uma versão menos hacky:

var d = new Date();
var seconds = d.getTime() / 1000;

Não se esqueça de Math.floor()ou Math.round()para arredondar para o número inteiro mais próximo ou você pode obter um decimal muito estranho que você não quer:

var d = new Date();
var seconds = Math.round(d.getTime() / 1000);
DVK
fonte
8
var seconds = new Date() / 1000;<- que tipo de magia arcana é essa?
Martin Wickman
3
Re: Arcane Magic: Por estes documentos , o Javascript sabe como converter um objeto Date para um número. Isso significa que você pode digitar Number(new Date())para obter um número, ou mesmo +(new Date()), ou usar qualquer instância de Data em um contexto numérico como new Date()/1000e Javascript converterá essa instância de Data em um número para trabalhar com suas equações matemáticas.
dpmott
59

Tente o seguinte:

new Date().getTime() / 1000

Você pode usar Math.floor()ou Math.round()cortar a fração de milissegundos.

Tomasz Nurkiewicz
fonte
39

Você queria segundos desde a época

function seconds_since_epoch(){ return Math.floor( Date.now() / 1000 ) }

exemplo de uso

foo = seconds_since_epoch();
user40521
fonte
3
Essa deve ser a resposta, pois leva em consideração o decimal.
James Pacote
11

As soluções acima usam propriedades da instância. Outra maneira é usar a propriedade de classe Date.now:

var time_in_millis = Date.now();
var time_in_seconds = time_in_millis / 1000;

Se você deseja que time_in_seconds seja um número inteiro, você tem 2 opções:

uma. Se você deseja ser consistente com o truncamento no estilo C:

time_in_seconds_int = time_in_seconds >= 0 ?
                      Math.floor(time_in_seconds) : Math.ceil(time_in_seconds);

b. Se você deseja apenas ter a definição matemática da divisão inteira, basta usar a palavra. (A divisão inteira do Python faz isso).

time_in_seconds_int = Math.floor(time_in_seconds);
dotgc
fonte
9

Se você deseja apenas segundos como um número inteiro sem os decimais representando milissegundos ainda anexados, use o seguinte:

var seconds = Math.floor(new Date() / 1000);
Ryan Kreager
fonte
5

Você pode criar um objeto Date (que terá a hora atual) e depois chamar getTime()para obter as ms desde a época.

var ms = new Date().getTime();

Se você quiser segundos, divida-o por 1000:

var sec = new Date().getTime() / 1000;
jfriend00
fonte
4

Minha maneira preferida:

var msEpoch = (+new Date());
var sEpoch = (+new Date()) / 1000;

Para mais informações sobre o + salto na toca do coelho .

Vinay
fonte
1

A versão mais simples:

Math.floor(Date.now() / 1000) 
aristidesfl
fonte
0
EPOCH means time from 01 January 1970
var date = new Date();
Following line will return the number of milliseconds from 01 Jaunary 1970
var ms = date.getTime();
Following line will convert milliseconds to seconds
var seconds = Math.floor(ms/1000);
console.log("Seconds since epoch =",seconds);
Tanzeem Bhatti
fonte