¿Cómo obtengo la fecha o la hora actual en segundos usando Javascript?
Cómo obtener la fecha actual y/o la hora en segundos
Granizo
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:
- 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.
- 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 deMath.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, yMath.floor()
yMath.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())
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. 🙂
Константин Ван
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
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