¿Cómo puedo obtener una marca de tiempo en JavaScript?
Algo similar a la marca de tiempo de Unix , es decir, un número único que representa la hora y fecha actuales. Ya sea como un número o una cadena.
¿Cómo puedo obtener una marca de tiempo en JavaScript?
Algo similar a la marca de tiempo de Unix , es decir, un número único que representa la hora y fecha actuales. Ya sea como un número o una cadena.
Respuestas:
Corto y elegante:
Un operador unario como
plus
activa elvalueOf
método en elDate
objeto y devuelve la marca de tiempo (sin ninguna alteración).Detalles:
En casi todos los navegadores actuales puede usar
Date.now()
para obtener la marca de tiempo UTC en milisegundos ; Una notable excepción a esto es IE8 y versiones anteriores (ver tabla de compatibilidad ).Sin embargo, puede hacer una cuña para esto:
Para obtener la marca de tiempo en segundos , puede usar:
O, alternativamente, podría usar:
Que debería ser un poco más rápido, pero también menos legible (también vea esta respuesta ).
Recomendaría usar
Date.now()
(con compatibilidad shim). Es un poco mejor porque es más corto y no crea un nuevoDate
objeto. Sin embargo, si no desea un calce y una compatibilidad máxima, puede usar el método "antiguo" para obtener la marca de tiempo en milisegundos :Que luego puedes convertir a segundos como este:
Y también puede usar el
valueOf
método que mostramos arriba:Marca de tiempo en milisegundos
fuente
Date.now() / 1000 | 0
sufrirá el problema del año 2038 ?new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Data
es inteligente, no es legible por otros desarrolladores.Date.now()
es más claro y garantiza que todos los demás sepan lo que está sucediendo.Me gusta esto, porque es pequeño:
También me gusta esto, porque es igual de corto y es compatible con los navegadores modernos, y más de 500 personas votaron que es mejor:
fuente
new Date().getTime()
. ¡Por suerte para mí, la solución más rápida ya es la solución legible!new Date().toString()
se llama.+
haciendo el operador para que salga como una cuerda?JavaScript funciona con la cantidad de milisegundos desde la época, mientras que la mayoría de los otros idiomas funcionan con los segundos. Podría trabajar con milisegundos, pero tan pronto como pase un valor para decir PHP, las funciones nativas de PHP probablemente fallarán. Entonces, para estar seguro, siempre uso los segundos, no milisegundos.
Esto le dará una marca de tiempo Unix (en segundos):
Esto le dará los milisegundos desde la época (no la marca de tiempo de Unix):
fuente
Unix timestamp
vsSeconds since the Epoch
. ¿No se supone que estos dos significan lo mismo?fuente
(Date.now||function(){return +new Date})();
Proporciono múltiples soluciones con descripciones en esta respuesta. Siéntase libre de hacer preguntas si algo no está claro
PD: lamentablemente alguien fusionó esto con la respuesta principal sin dar crédito.
Solución rápida y sucia:
Math.floor()
solución:Alguna alternativa nerd de Derek 朕 會 功夫 tomada de los comentarios debajo de esta respuesta:
Polyfill para ponerse a
Date.now()
trabajar:Para que funcione en IE, puede hacer esto (Polyfill de MDN ):
Si no le importa el año / día de la semana / horario de verano, puede deshacerse de él y usarlo después de 2038:
Si solo desea saber el tiempo relativo desde el momento en que se ejecutó el código primero, puede usar algo como esto:
En caso de que esté usando jQuery, puede usarlo
$.now()
como se describe en los documentos de jQuery, lo que hace que el polyfill sea obsoleto ya que$.now()
internamente hace lo mismo:(new Date).getTime()
Si está contento con la versión de jQuery, considere votar esta respuesta ya que no la encontré yo mismo.
Ahora una pequeña explicación de lo que
|0
hace:Al proporcionar
|
, le dice al intérprete que haga una operación OR binaria. Las operaciones de bit requieren números absolutos que convierten el resultado decimalDate.now() / 1000
en un entero.Durante esa conversión, se eliminan los decimales, lo que resulta en el mismo resultado que usar
Math.floor()
pero usando menos código.Para obtener más información sobre
Date.now
siga este enlace:Date.now()
@ MDNfuente
Date.now()
referencia: developer.mozilla.org/en-US/docs/JavaScript/Reference/…new Date/1e3|0
.fuente
jQuery proporciona su propio método para obtener la marca de tiempo:
(además solo implementa
(new Date).getTime()
expresión)REF: http://api.jquery.com/jQuery.now/
fuente
parseInt
, ya que el valor resultante siempre será aNumber
.fuente
+new Date
.. :)Date.now()
Además de las otras opciones, si desea un formato de fecha ISO, puede obtenerlo directamente
fuente
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Solo para sumar, aquí hay una función para devolver una cadena de marca de tiempo en Javascript. Ejemplo: 15:06:38 PM
fuente
Fecha , un objeto nativo en JavaScript es la forma en que obtenemos todos los datos sobre el tiempo.
Solo tenga cuidado en JavaScript, la marca de tiempo depende del conjunto del equipo cliente, por lo que no es una marca de tiempo 100% precisa. Para obtener el mejor resultado, debe obtener la marca de tiempo del lado del servidor .
De todos modos, mi forma preferida es usar vainilla. Esta es una forma común de hacerlo en JavaScript:
En MDN se menciona a continuación:
Si usa una versión inferior a ES5,
Date.now();
no funciona y necesita usar:fuente
Uno que aún no he visto
Otro que aún no he visto es
fuente
Date.now() /1000 |0
hace lo mismo y ha sido respondido antesMath.floor()
, pero solo para dejar en claro que tiene el mismo efecto que|0
. No quería hacerte daño ni nada. Solo quería decirte que tu respuesta de alguna manera ya existe. Al observar todas las respuestas dadas, hay algunas que notan el piso de alguna manera._.now()
es un poco exagerado. Recomendaría solo importar la funcionalidad de Lodash que necesita usar (en este caso, _.now () en NPM ), pero incluso ellos han dejado de usar su paquete a favor de solo usarloDate.now()
.El
Date.getTime()
método se puede usar con un pequeño ajuste:Divida el resultado entre 1000 para obtener la marca de tiempo de Unix,
floor
si es necesario:El
Date.valueOf()
método es funcionalmente equivalente aDate.getTime()
, lo que hace posible utilizar operadores aritméticos en un objeto de fecha para lograr resultados idénticos. En mi opinión, este enfoque afecta la legibilidad.fuente
new Date().getTime() / 1000
()
despuésnew Date
y.getTime()
desde entonces/
convertirá el objeto Fecha en un número de todos modos.El código
Math.floor(new Date().getTime() / 1000)
se puede acortar anew Date / 1E3 | 0
.Considere omitir la
getTime()
invocación directa y usarla| 0
como reemplazo de laMath.floor()
función. También es bueno recordar que1E3
es un equivalente más corto para1000
(se prefiere E mayúscula que minúscula para indicar1E3
como constante).Como resultado obtienes lo siguiente:
fuente
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
= 23 bytes;Math.floor()
por|0
hace que este código sea "claro y comprensible". Explícame cuál es el punto de guardar 1 byte reemplazándolo1000
por1E3
. Esto es ridículo. Veo un mal código.Actuación
Hoy - 2020.04.23 Realizo pruebas para las soluciones elegidas. Probé en MacOs High Sierra 10.13.6 en Chrome 81.0, Safari 13.1, Firefox 75.0
Conclusiones
Date.now()
(E) es más rápida en Chrome y Safari y la segunda más rápida en Firefox, y esta es probablemente la mejor opción para una solución rápida entre navegadoresperformance.now()
(G), lo que es sorprendente, es más de 100 veces más rápido que otras soluciones en Firefox pero la más lenta en ChromeDetalles
Resultados para el cromo
Puede realizar la prueba en su máquina AQUÍ
El código utilizado en las pruebas se presenta en el siguiente fragmento
Mostrar fragmento de código
fuente
performance.now()
ya que se supone que es el más preciso en términos de sello.privacy.reduceTimerPrecision
que redondea los resultados al milisegundo más cercano. También está habilitado de forma predeterminada, pero puede deshabilitarse. developer.mozilla.org/en-US/docs/Web/API/Performance/nowRecomiendo usarlo
moment.js
. Para obtener el número de milisegundos desde la época de UNIX, hagaPara obtener el número de segundos desde la época UNIX, haga
También puedes convertir tiempos así:
Lo hago todo el tiempo. Sin juego de palabras.
Para usar
moment.js
en el navegador:Para obtener más detalles, incluidas otras formas de instalar y usar MomentJS, consulte sus documentos
fuente
Para una marca de tiempo con resolución de microsegundos, hay
performance.now
:Esto podría, por ejemplo
1436140826653.139
, ceder , mientras queDate.now
solo da1436140826653
.fuente
Solo puedes usar
para obtener la marca de tiempo actual. No es necesario hacer nada extra.
fuente
Aquí hay una función simple para generar la marca de tiempo en el formato: mm / dd / aa hh: mi: ss
fuente
(new (chain (-date) (to-i-s-o-string)))
.fuente
Cualquier navegador que no sea compatible con Date.now, puede usar esto para obtener la fecha y hora actual:
fuente
Date.now
realmente existe (y es una función), antes de intentar invocarlo:currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.Este tiene una solución: que convierte el sello unixtime a tim en js intente esto
fuente
El otro día aprendí una forma realmente genial de convertir un objeto Date dado en una marca de tiempo Unix del código fuente de JQuery Cookie .
Aquí hay un ejemplo:
fuente
Si desea una forma básica de generar una marca de tiempo en Node.js, esto funciona bien.
Nuestro equipo está utilizando esto para reventar el caché en un entorno localhost. La salida es
/dist/css/global.css?v=245521377
donde245521377
está la marca de tiempo generada porhrtime()
.Espero que esto ayude, los métodos anteriores también pueden funcionar, pero descubrí que este es el enfoque más simple para nuestras necesidades en Node.js.
fuente
Esto parece funcionar.
fuente
Si es para fines de registro, puede usar ISOString
new Date().toISOString()
fuente
Para usuarios lodash y subrayados , use
_.now
.fuente
Moment.js puede abstraer mucho del dolor al tratar con las fechas de Javascript.
Ver: http://momentjs.com/docs/#/displaying/unix-timestamp/
fuente
moment().valueOf()
. Mira mi respuesta.Al momento de escribir esto, la respuesta principal tiene 9 años, y muchas cosas han cambiado desde entonces, y no menos importante, tenemos un soporte casi universal para una solución no hacky:
Si desea estar absolutamente seguro de que esto no se romperá en algún navegador antiguo (anterior al 9), puede ponerlo detrás de un cheque, así:
Esto devolverá los milisegundos desde el tiempo de la época, por supuesto, no segundos.
Documentación de MDN en Date.now
fuente
forma más simple:
fuente
event
viene. Debe dar una mejor explicación de la forma en que lo resuelve en lugar de escribir una respuesta. ¡Por favor!