2010-09-30 60 views
220

¿Cómo obtengo la fecha/hora actual en segundos en Javascript?Obtener la fecha/hora actual en segundos

+1

duplicado posible de [¿Cómo se obtiene una marca de tiempo en JavaScript?] (Http://stackoverflow.com/questions/221294/how-do-you-get-a-timestamp-in-javascript) – GottZ

Respuesta

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

... .le dará los segundos desde la medianoche del 1 de enero de 1970

Reference

+8

Si bien esto es preciso, ¿cuándo sería útil alguna vez? :) –

+0

@ sje397 - Sí ... pero la pregunta (como la mayoría en SO) es más probable que resuelva un problema * práctico *, ¿podría darme un ejemplo en el que desea mostrar este resultado? –

+5

@Nick - Creo que todos los ejemplos son necesariamente especulativos y sonarán artificiales, pero daré una oportunidad :) Supongamos que tiene datos de tiempo marcados con tiempo Unix y desea determinar su edad. Aunque creo que esto es lo que probablemente significa "la fecha/hora actual en segundos"; solo mi instinto. – sje397

37

Basado en su comentario, creo que usted está buscando algo como esto:

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

Luego, en su cheque, usted está comprobando:

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

para obtener el número de segundos desde el uso Javascript época:

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

Usando new Date().getTime()/1000 es una solución incompleta para la obtención de los segundos, ya que produce las marcas de tiempo con las unidades de punto flotante.

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

Una mejor solución sería:

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

// - OR - 

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

Los valores sin flotadores son también más seguro para las sentencias condicionales, como el flotador puede producir resultados no deseados. La granularidad que obtienes con un flotador puede ser más de lo necesario.

if (1405792936.993 < 1405792937) // true 
1

forma más elegante para obtener el tiempo en segundos/milisegundos desde ene 1 1970 está

var milliseconds = +new Date();   
var seconds = milliseconds/1000; 
0

Permítanme sugerir una mejor atajo:

+new Date # Milliseconds since Linux epoch 
+new Date/1000 # Seconds since Linux epoch 
Math.round(+new Date/1000) #Seconds without decimals since Linux epoch 
5

// 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>

0

Estos JavaScript soluciones que dan los milisegundos o los segundos desde la medianoche, el 1 de enero de 1970.

La solución 9+ IE (IE 8 o la versión anterior no es compatible con esto.):

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 obtener más información sobre Date.now(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

La solución 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. 

tener cuidado de usar, si usted no quiere algo así como este caso.

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