Comment puis-je obtenir des secondes depuis l'époque en Javascript?

152

Sous Unix, je peux courir date '+%s'pour obtenir le nombre de secondes depuis l'époque. Mais je dois interroger cela dans un front-end de navigateur, pas en back-end.

Existe-t-il un moyen de connaître les secondes écoulées depuis Epoch en JavaScript?

Alice
la source

Réponses:

246
var seconds = new Date() / 1000;

Ou, pour une version moins hacky:

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

N'oubliez pas d'arrondir Math.floor()ou Math.round()d'arrondir au nombre entier le plus proche ou vous pourriez obtenir une décimale très étrange que vous ne voulez pas:

var d = new Date();
var seconds = Math.round(d.getTime() / 1000);
DVK
la source
8
var seconds = new Date() / 1000;<- de quel genre de magie arcanique s'agit-il?
Martin Wickman
3
Re: magie des arcanes: selon ces documents , Javascript sait comment convertir un objet Date en un nombre. Cela signifie que vous pouvez taper Number(new Date())pour obtenir un nombre, ou même +(new Date()), ou utiliser n'importe quelle instance de Date dans un contexte numérique tel que new Date()/1000et Javascript convertira utilement cette instance de Date en nombre pour travailler avec vos équations mathématiques.
dpmott
59

Essaye ça:

new Date().getTime() / 1000

Vous voudrez peut-être utiliser Math.floor()ou Math.round()couper une fraction de millisecondes.

Tomasz Nurkiewicz
la source
39

Tu voulais des secondes depuis l'époque

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

exemple d'utilisation

foo = seconds_since_epoch();
utilisateur40521
la source
3
Cela devrait être la réponse car elle prend en compte la décimale.
James Pack
11

Les solutions ci-dessus utilisent des propriétés d'instance. Une autre façon consiste à utiliser la propriété class Date.now:

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

Si vous voulez que time_in_seconds soit un entier, vous avez 2 options:

une. Si vous voulez être cohérent avec la troncature de style C:

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

b. Si vous voulez simplement avoir la définition mathématique de la division entière, prenez la parole. (La division entière de Python fait cela).

time_in_seconds_int = Math.floor(time_in_seconds);
dotgc
la source
9

Si vous ne voulez que des secondes sous forme de nombre entier sans les décimales représentant les millisecondes encore attachées, utilisez ceci:

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

Vous pouvez créer un objet Date (qui contiendra l'heure actuelle), puis appeler getTime()pour obtenir les ms depuis l'époque.

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

Si vous voulez des secondes, divisez-les par 1000:

var sec = new Date().getTime() / 1000;
jfriend00
la source
1

La version la plus simple:

Math.floor(Date.now() / 1000) 
aristidesfl
la source
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
la source