Obter data / hora atual em segundos

Respostas:

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

.... lhe dará os segundos desde meia-noite, 1 de janeiro de 1970

Referência

sje397
fonte
13
Embora isso seja preciso, quando seria útil? :)
Nick Craver
6
@ Nick - Eu acho que todos os exemplos são necessariamente especulativos e parecerão inventados - mas eu vou tentar :) Suponha que você tenha um tempo de dados carimbado com tempo unix e queira determinar sua idade. Mais ainda, acho que é isso que provavelmente significa "a data / hora atual em segundos"; apenas meu instinto.
precisa saber é o seguinte
3
Um aplicativo em que eu precisava disso era trabalhar com um back-end do PHP, pois a função time () já retorna isso. Também é ótimo para um registro de data e hora, pois você pode facilmente obter a diferença entre time (), sendo nosso horário atual e um registro de data e hora de um horário anterior armazenado em um banco de dados, digamos quando um usuário postou alguma coisa. Caso deseje obter um horário formatado como '22 de outubro de 2015', você pode criar sua própria função para retornar isso de um registro de data e hora como argumento ou usar um já aqui na Stack. De qualquer forma, espero que você tenha uma idéia de quando isso seria útil. @NickCraver
uhfocuz
21
Vale a pena notar que você deseja agrupar isso em Math.floor (), caso contrário, você obtém um decimal.
David Webber
11
Uma maneira de isso ser útil seria calcular o tempo decorrido entre duas vezes.
Zac
65

Usar new Date().getTime() / 1000é uma solução incompleta para obter os segundos, porque produz registros de data e hora com unidades de ponto flutuante.

const timestamp = new Date() / 1000; // 1405792936.933
// Technically, .933 would be milliseconds. 

Uma solução melhor seria:

// Rounds the value
const timestamp = Math.round(new Date() / 1000); // 1405792937

// - OR -

// Floors the value
const timestamp = new Date() / 1000 | 0; // 1405792936

Valores sem flutuações também são mais seguros para instruções condicionais, pois a flutuação pode produzir resultados indesejados. A granularidade obtida com um flutuador pode ser mais do que o necessário.

if (1405792936.993 < 1405792937) // true
tfmontague
fonte
1
Concordo totalmente 👍 UsoMath.round(new Date() / 1000)
gdibble
37

Com base no seu comentário, acho que você está procurando algo assim:

var timeout = new Date().getTime() + 15*60*1000; //add 15 minutes;

Então, no seu cheque, você está verificando:

if(new Date().getTime() > timeout) {
  alert("Session has expired");
}
Nick Craver
fonte
16

Para obter o número de segundos da época do Javascript, use:

date = new Date();
milliseconds = date.getTime();
seconds = milliseconds / 1000;
Lázaro
fonte
9

// The Current Unix Timestamp
// 1443535752 seconds since Jan 01 1970. (UTC)

// Current time in seconds
console.log(Math.floor(new Date().valueOf() / 1000));  // 1443535752
console.log(Math.floor(Date.now() / 1000));            // 1443535752
console.log(Math.floor(new Date().getTime() / 1000));  // 1443535752
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

jQuery

console.log(Math.floor($.now() / 1000));               // 1443535752
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

blueberry0xff
fonte
3

Essas soluções JavaScript fornecem milissegundos ou segundos desde a meia-noite de 1º de janeiro de 1970.

A solução IE 9+ (IE 8 ou a versão mais antiga não suporta isso.):

var timestampInMilliseconds = Date.now();
var timestampInSeconds = Date.now() / 1000; // A float value; not an integer.
    timestampInSeconds = Math.floor(Date.now() / 1000); // Floor it to get the seconds.
    timestampInSeconds = Date.now() / 1000 | 0; // Also you can do floor it like this.
    timestampInSeconds = Math.round(Date.now() / 1000); // Round it to get the seconds.

Para obter mais informações sobre Date.now(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

A solução genérica:

// ‘+’ operator makes the operand numeric.
// And ‘new’ operator can be used without the arguments ‘(……)’.
var timestampInMilliseconds = +new Date;
var timestampInSeconds = +new Date / 1000; // A float value; not an intger.
    timestampInSeconds = Math.floor(+new Date / 1000); // Floor it to get the seconds.
    timestampInSeconds = +new Date / 1000 | 0; // Also you can do floor it like this.
    timestampInSeconds = Math.round(+new Date / 1000); // Round it to get the seconds.

Tenha cuidado ao usar, se você não quiser algo como este caso.

if(1000000 < Math.round(1000000.2)) // false.
Константин Ван
fonte
2
Date.now()-Math.floor(Date.now()/1000/60/60/24)*24*60*60*1000

Isso deve fornecer os milissegundos desde o início do dia.

(Date.now()-Math.floor(Date.now()/1000/60/60/24)*24*60*60*1000)/1000

Isso deve lhe dar segundos.

(Date.now()-(Date.now()/1000/60/60/24|0)*24*60*60*1000)/1000

O mesmo que o anterior, exceto que usa um operador bit a bit para calcular a quantidade de dias.

CEO RecDecLec
fonte
1

Você pode conhecer outra maneira de obter tempo em segundos / milissegundos desde 1 de janeiro de 1970:

var milliseconds = +new Date;        
var seconds = milliseconds / 1000;

Mas tenha cuidado com essa abordagem, pois pode ser difícil de ler e entender.

tetta
fonte
Não sei, pois o uso dos efeitos colaterais da linguagem é uma maneira mais elegante.
tomazahlin
1

Melhores atalhos:

+new Date # Milliseconds since Linux epoch
+new Date / 1000 # Seconds since Linux epoch
Math.round(+new Date / 1000) #Seconds without decimals since Linux epoch
dr.dimitru
fonte
0

Em algum dia de 2020, no Chrome 80.0.3987.132, isso fornece 1584533105

~~(new Date()/1000) // 1584533105
Number.isInteger(~~(new Date()/1000)) // true
etoricky
fonte
-1

Para obter o total de segundos do dia de hoje:

getTodaysTotalSeconds(){
    let date = new Date();        
    return +(date.getHours() * 60 * 60) + (date.getMinutes() * 60);
}

Eu adicionei +em troca que retornam int. Isso pode ajudar outros desenvolvedores. :)

Sachin Shah
fonte