Obtener la fecha / hora actual en segundos

Respuestas:

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

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

Referencia

sje397
fuente
13
Si bien esto es exacto, ¿cuándo sería útil? :)
Nick Craver
66
@Nick: creo que todos los ejemplos son necesariamente especulativos y parecerán artificiales, pero haré un tiro :) Supongamos que tiene un tiempo de datos estampado con tiempo de Unix y desea determinar su antigüedad. Además, creo que esto es lo que probablemente se entiende por "la fecha / hora actual en segundos"; solo mi instinto
sje397
3
Una aplicación donde necesitaba esto era trabajar con un back-end PHP ya que la función time () ya devuelve esto. También es ideal para una marca de tiempo, ya que puede obtener fácilmente la diferencia entre la hora () que es nuestra hora actual y una marca de tiempo de una hora anterior que se había almacenado en una base de datos, por ejemplo, cuando un usuario publicó algo. En el caso de que desee obtener una hora formateada como '22 de octubre de 2015', puede diseñar su propia función para devolverla de una marca de tiempo como argumento o usar una que ya esté aquí en Stack. De todos modos, espero que te dé una idea de cuándo sería útil. @NickCraver
uhfocuz
21
Vale la pena señalar que desea envolver eso en Math.floor (), de lo contrario obtendrá un decimal.
David Webber
11
Una forma en que esto sería útil sería calcular el tiempo transcurrido entre dos veces.
Zac
65

Usar new Date().getTime() / 1000es una solución incompleta para obtener los segundos, porque produce marcas de tiempo con unidades de punto flotante.

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

Una mejor solución sería:

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

// - OR -

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

Los valores sin flotantes también son más seguros para las declaraciones condicionales, ya que el flotante puede producir resultados no deseados. La granularidad que obtiene con un flotador puede ser más de lo necesario.

if (1405792936.993 < 1405792937) // true
tfmontague
fuente
1
Totalmente de acuerdo 👍 UsoMath.round(new Date() / 1000)
gdibble
37

Según tu comentario, creo que estás buscando algo como esto:

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

Luego, en su cheque, está verificando:

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

Para obtener el número de segundos de la época de Javascript, use:

date = new Date();
milliseconds = date.getTime();
seconds = milliseconds / 1000;
Lázaro
fuente
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
fuente
3

Estas soluciones de JavaScript le dan los milisegundos o los segundos desde la medianoche del 1 de enero de 1970.

La solución IE 9+ (IE 8 o la versión anterior no admite 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.

Tenga cuidado de usar, si no quiere algo como este caso.

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

Esto debería darte los milisegundos desde el comienzo del día.

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

Esto debería darte segundos.

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

Igual que el anterior, excepto que utiliza un operador bit a bit para determinar la cantidad de días.

CEO RecDecLec
fuente
1

Puede conocer otra forma de obtener tiempo en segundos / milisegundos desde el 1 de enero de 1970:

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

Pero tenga cuidado con este enfoque, porque puede ser difícil leerlo y comprenderlo.

tetta
fuente
No lo sé porque usar los efectos secundarios del lenguaje es una forma más elegante.
tomazahlin
1

Mejores atajos:

+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
fuente
0

Algún día en 2020, dentro de Chrome 80.0.3987.132, esto da 1584533105

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

Para obtener los segundos totales del día de hoy:

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

Tengo agregar +a cambio que volver a entrar int. Esto puede ayudar a otros desarrolladores. :)

Sachin Shah
fuente