Ottieni la data / ora corrente in secondi


Risposte:


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

.... ti darà i secondi dalla mezzanotte del 1 ° gennaio 1970

Riferimento


13
Mentre questo è accurato, quando sarebbe mai utile? :)
Nick Craver

6
@Nick - Penso che tutti gli esempi siano necessariamente speculativi e sembreranno forzati - ma prenderò uno scatto :) Supponiamo che tu abbia i timestamp dei dati con il tempo unix e che desideri determinare la sua età. Inoltre, penso che questo sia probabilmente il significato di "data / ora correnti in secondi"; solo il mio istinto.
sje397,

3
Un'applicazione in cui avevo bisogno di questo era di lavorare con un back-end PHP poiché la funzione time () lo restituiva già. È anche ottimo per un timestamp in quanto puoi facilmente ottenere la differenza tra time () che è il nostro tempo corrente e un timestamp di un tempo precedente che era stato memorizzato in un database quando un utente ha pubblicato qualcosa. Nel caso in cui desideri ottenere un tempo formattato come "22 ottobre 2015", puoi creare la tua funzione per restituirla da un timestamp come argomento o utilizzarne uno già qui su Stack. Ad ogni modo, spero che ti dia qualche idea su quando questo sarebbe utile. @NickCraver
uhfocuz,

21
Vale la pena notare che si desidera racchiuderlo in Math.floor (), altrimenti si ottiene un decimale.
David Webber,

11
Un modo utile sarebbe quello di calcolare il tempo trascorso tra due volte.
Zac,


65

L'utilizzo new Date().getTime() / 1000è una soluzione incompleta per ottenere i secondi, poiché produce timestamp con unità a virgola mobile.

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

Una soluzione migliore sarebbe:

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

// - OR -

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

I valori senza float sono anche più sicuri per le istruzioni condizionali, poiché il float può produrre risultati indesiderati. La granularità che si ottiene con un galleggiante può essere più del necessario.

if (1405792936.993 < 1405792937) // true

1
Totalmente d'accordo 👍 UsaMath.round(new Date() / 1000)
gdibble il

37

Sulla base del tuo commento, penso che tu stia cercando qualcosa del genere:

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

Quindi nel tuo controllo, stai controllando:

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

16

Per ottenere il numero di secondi dall'epoca Javascript usare:

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

Queste soluzioni JavaScript offrono millisecondi o secondi dalla mezzanotte del 1 gennaio 1970.

La soluzione IE 9+ (IE 8 o la versione precedente non supporta questo.):

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.

Per ulteriori informazioni su Date.now(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

La soluzione generica:

// ‘+’ 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.

Fai attenzione, se non vuoi qualcosa come questo caso.

if(1000000 < Math.round(1000000.2)) // false.

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

Questo dovrebbe darti i millisecondi dall'inizio della giornata.

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

Questo dovrebbe darti secondi.

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

Come il precedente tranne che utilizza un operatore bit a bit per indicare il numero di giorni.


1

Puoi incontrare un altro modo per ottenere il tempo in secondi / millisecondi dal 1 ° gennaio 1970:

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

Ma fai attenzione con tale approccio, perché potrebbe essere difficile da leggere e capire.


Non lo so da quando l'uso degli effetti collaterali del linguaggio è un modo più elegante.
Tomazahlin,

1

Migliori scorciatoie:

+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

In qualche giorno del 2020, all'interno di Chrome 80.0.3987.132, questo dà 1584533105

~~(new Date()/1000) // 1584533105
Number.isInteger(~~(new Date()/1000)) // true

-1

Per ottenere i secondi totali del giorno di oggi:

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

Ho aggiunto +in cambio quale ritorno int. Questo può aiutare altri sviluppatori. :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.