Cómo obtener la fecha actual y/o la hora en segundos

4 minutos de lectura

avatar de usuario
Granizo

¿Cómo obtengo la fecha o la hora actual en segundos usando Javascript?

  • Posible duplicado de ¿Cómo se obtiene una marca de tiempo en JavaScript?

    – GottZ

    25 de abril de 2016 a las 15:34

  • Tenga en cuenta que la respuesta aceptada producirá un número de punto flotante.

    – e18r

    5 de abril de 2018 a las 1:05


avatar de usuario
tim-montague

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

new Date() / 1000; // 1405792936.933

// Technically, .933 would be in milliseconds

En su lugar, use:

Math.round(Date.now() / 1000); // 1405792937

// Or
Math.floor(Date.now() / 1000); // 1405792936

// Or
Math.ceil(Date.now() / 1000); // 1405792937

// Note: In general, I recommend `Math.round()`,
//   but there are use cases where
//   `Math.floor()` and `Math.ceil()`
//   might be better suited.

Además, los valores sin flotantes son más seguros para las sentencias condicionales, porque la granularidad que se obtiene con los flotantes puede generar resultados no deseados. Por ejemplo:

if (1405792936.993 < 1405792937) // true

Advertencia: Los operadores bit a bit pueden causar problemas cuando se utilizan para manipular las marcas de tiempo. Por ejemplo, (new Date() / 1000) | 0 también se puede usar para “pisar” el valor en segundos, sin embargo, ese código causa los siguientes problemas:

  1. Por defecto, los números de Javascript son de tipo flotante de 64 bits (doble precisión), y los operadores bit a bit convierten implícitamente ese tipo en enteros de 32 bits con signo. Podría decirse que el compilador no debe convertir implícitamente el tipo y, en cambio, el desarrollador debe realizar la conversión donde sea necesario.
  2. La marca de tiempo de entero de 32 bits con signo producida por el operador bit a bit hace que el año 2038 problema como se indica en los comentarios.

  • Totalmente de acuerdo 👍 Uso Math.round(new Date() / 1000)

    – gdibble

    06/10/2018 a las 21:20

  • Tenga en cuenta que suelo con el operador bit a bit dará como resultado que el valor se convierta en un entero de 32 bits con signo. Ver Problema del año 2038.

    – Ryan

    21 de septiembre de 2021 a las 17:29

  • @Ryan: gracias, actualicé mi respuesta para desalentar el uso de | 0

    – tim-montague

    22/09/2021 a las 22:07

  • por qué Math.round en vez de Math.floor/Math.trunc?

    – André Figueiredo

    6 de diciembre de 2021 a las 19:48


  • @AndreFigueiredo – Gracias por estos ejemplos. La solución que proporcioné fue para la pregunta “¿Cómo obtengo la fecha/hora actual en segundos en Javascript?”, por lo que su ejemplo en horas no está dentro del contexto, pero creo que sus ejemplos en segundos tienen alguna validez. En general, sigo pensando Math.round() es mejor. Pero sí, estoy de acuerdo en que hay casos de uso en los que no es lo mejor, y Math.floor() y Math.ceil() son más apropiados. He actualizado mi respuesta para notar lo mismo.

    – tim-montague

    9 de diciembre de 2021 a las 3:47

  • Esta respuesta por milisegundos ni siquiera responde la pregunta que se hizo. “¿Cómo obtengo la fecha/hora actual en segundos?”

    – tim-montague

    17 de agosto de 2020 a las 21:53


  • Date.now() / 1000 para responder a la pregunta en sí

    – mago11

    24 de agosto de 2021 a las 8:48

  • @mago11 – Date.now() / 1000 tampoco responde la pregunta, porque da valores con fracciones parciales en milisegundos

    – tim-montague

    28 de septiembre de 2021 a las 7:30


  • Matemáticas.piso(Fecha.ahora()/1000)

    –Daniel Wu

    31 de marzo a las 3:34

Yo uso esto:

Math.round(Date.now() / 1000)

No es necesario crear nuevos objetos (ver doc Fecha.ahora())

avatar de usuario
Comunidad

Para obtener el total de segundos del día de hoy:

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

he añadido + a cambio que regreso en int. Esto puede ayudar a otros desarrolladores. 🙂

avatar de usuario
Константин Ван

Estas soluciones de JavaScript le brindan 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 es compatible):

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.

  • Hola, yo más joven. ¿Cómo estás?

    – Константин Ван

    21 mayo 2021 a las 16:37

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad