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


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

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");
}

16

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

date = new Date();
milliseconds = date.getTime();
seconds = milliseconds / 1000;

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>


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.

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.


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.


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

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

-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. :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.