¿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:
+ new Date()
Un operador unario como plus
activa el valueOf
método en el Date
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:
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
Para obtener la marca de tiempo en segundos , puede usar:
Math.floor(Date.now() / 1000)
O, alternativamente, podría usar:
Date.now() / 1000 | 0
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 nuevo Date
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 :
new Date().getTime()
Que luego puedes convertir a segundos como este:
Math.round(new Date().getTime()/1000)
Y también puede usar el valueOf
método que mostramos arriba:
new Date().valueOf()
Marca de tiempo en milisegundos
var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();
console.log(timeStampInMs, Date.now());
~~(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:
+new Date
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:
Date.now()
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):
var unix = Math.round(+new Date()/1000);
Esto le dará los milisegundos desde la época (no la marca de tiempo de Unix):
var milliseconds = new Date().getTime();
Unix timestamp
vs Seconds since the Epoch
. ¿No se supone que estos dos significan lo mismo?
var time = Date.now || function() {
return +new Date;
};
time();
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:
Date.now() /1000 |0
Advertencia : podría romperse en 2038 y devolver números negativos si haces la
|0
magia. Usar en suMath.floor()
lugar para ese momento
Math.floor()
solución:
Math.floor(Date.now() /1000);
Alguna alternativa nerd de Derek 朕 會 功夫 tomada de los comentarios debajo de esta respuesta:
new Date/1e3|0
Polyfill para ponerse a Date.now()
trabajar:
Para que funcione en IE, puede hacer esto (Polyfill de MDN ):
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
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:
var now = (function () {
var year = new Date(new Date().getFullYear().toString()).getTime();
return function () {
return Date.now() - year
}
})();
Algunos resultados de cómo se verá:
new Date() Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit ) new Date(now()) Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )
Por supuesto, romperá el horario de verano, pero dependiendo de lo que esté construyendo, esto podría ser útil si necesita realizar operaciones binarias en las marcas de tiempo después de que int32 se romperá en 2038.
Esto también devolverá valores negativos, pero solo si el usuario de esa PC en la que está ejecutando su código está cambiando el reloj de su PC al menos al 31 de diciembre del año anterior.
Si solo desea saber el tiempo relativo desde el momento en que se ejecutó el código primero, puede usar algo como esto:
var relativeTime = (function () {
var start = Date.now();
return function () {
return Date.now() - start
}
})();
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 decimal Date.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.
Sin embargo, ten cuidado: convertirá un doble de 64 bits en un entero de 32 bits. Esto dará como resultado la pérdida de información cuando se trate de grandes cantidades. Las marcas de tiempo se romperán después de 2038 debido al desbordamiento de enteros de 32 bits.
Para obtener más información sobre Date.now
siga este enlace: Date.now()
@ MDN
Date.now()
referencia: developer.mozilla.org/en-US/docs/JavaScript/Reference/…
new Date/1e3|0
.
jQuery proporciona su propio método para obtener la marca de tiempo:
var timestamp = $.now();
(además solo implementa (new Date).getTime()
expresión)
parseInt
, ya que el valor resultante siempre será a Number
.
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
+new Date
.. :)
Date.now()
Además de las otras opciones, si desea un formato de fecha ISO, puede obtenerlo directamente
console.log(new Date().toISOString());
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
function displayTime() {
var str = "";
var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()
var seconds = currentTime.getSeconds()
if (minutes < 10) {
minutes = "0" + minutes
}
if (seconds < 10) {
seconds = "0" + seconds
}
str += hours + ":" + minutes + ":" + seconds + " ";
if(hours > 11){
str += "PM"
} else {
str += "AM"
}
return str;
}
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:
Date.now(); //return 1495255666921
En MDN se menciona a continuación:
El método Date.now () devuelve el número de milisegundos transcurridos desde el 1 de enero de 1970 00:00:00 UTC.
Como now () es un método estático de Date, siempre lo usa como Date.now ().
Si usa una versión inferior a ES5, Date.now();
no funciona y necesita usar:
new Date().getTime();
Uno que aún no he visto
Math.floor(Date.now() / 1000); // current time in seconds
Otro que aún no he visto es
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
Date.now() /1000 |0
hace lo mismo y ha sido respondido antes
Math.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 usarlo Date.now()
.
El Date.getTime()
método se puede usar con un pequeño ajuste:
El valor devuelto por el método getTime es el número de milisegundos desde el 1 de enero de 1970 a las 00:00:00 UTC.
Divida el resultado entre 1000 para obtener la marca de tiempo de Unix, floor
si es necesario:
(new Date).getTime() / 1000
El Date.valueOf()
método es funcionalmente equivalente a Date.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.
new Date().getTime() / 1000
()
después new 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 a new Date / 1E3 | 0
.
Considere omitir la getTime()
invocación directa y usarla | 0
como reemplazo de la Math.floor()
función. También es bueno recordar que 1E3
es un equivalente más corto para 1000
(se prefiere E mayúscula que minúscula para indicar 1E3
como constante).
Como resultado obtienes lo siguiente:
var ts = new Date / 1E3 | 0;
console.log(ts);
"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ándolo 1000
por 1E3
. Esto es ridículo. Veo un mal código.
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
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 ChromeResultados 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
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/now
Recomiendo usarlo moment.js
. Para obtener el número de milisegundos desde la época de UNIX, haga
moment().valueOf()
Para obtener el número de segundos desde la época UNIX, haga
moment().unix()
También puedes convertir tiempos así:
moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()
Lo hago todo el tiempo. Sin juego de palabras.
Para usar moment.js
en el navegador:
<script src="moment.js"></script>
<script>
moment().valueOf();
</script>
Para obtener más detalles, incluidas otras formas de instalar y usar MomentJS, consulte sus documentos
Para una marca de tiempo con resolución de microsegundos, hay performance.now
:
function time() {
return performance.now() + performance.timing.navigationStart;
}
Esto podría, por ejemplo 1436140826653.139
, ceder , mientras que Date.now
solo da 1436140826653
.
Solo puedes usar
var timestamp = new Date().getTime();
console.log(timestamp);
para obtener la marca de tiempo actual. No es necesario hacer nada extra.
Aquí hay una función simple para generar la marca de tiempo en el formato: mm / dd / aa hh: mi: ss
function getTimeStamp() {
var now = new Date();
return ((now.getMonth() + 1) + '/' +
(now.getDate()) + '/' +
now.getFullYear() + " " +
now.getHours() + ':' +
((now.getMinutes() < 10)
? ("0" + now.getMinutes())
: (now.getMinutes())) + ':' +
((now.getSeconds() < 10)
? ("0" + now.getSeconds())
: (now.getSeconds())));
}
(new (chain (-date) (to-i-s-o-string)))
.
// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)
// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720
// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087
// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Cualquier navegador que no sea compatible con Date.now, puede usar esto para obtener la fecha y hora actual:
currentTime = Date.now() || +new Date()
Date.now
realmente existe (y es una función), antes de intentar invocarlo: currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.
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:
var date = new Date();
var timestamp = +date;
Si desea una forma básica de generar una marca de tiempo en Node.js, esto funciona bien.
var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );
Nuestro equipo está utilizando esto para reventar el caché en un entorno localhost. La salida es /dist/css/global.css?v=245521377
donde 245521377
está la marca de tiempo generada por hrtime()
.
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.
Esto parece funcionar.
console.log(clock.now);
// returns 1444356078076
console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16
console.log(clock.format(clock.now + clock.add(10, 'minutes')));
//returns 10/8/2015 21:08:18
var clock = {
now:Date.now(),
add:function (qty, units) {
switch(units.toLowerCase()) {
case 'weeks' : val = qty * 1000 * 60 * 60 * 24 * 7; break;
case 'days' : val = qty * 1000 * 60 * 60 * 24; break;
case 'hours' : val = qty * 1000 * 60 * 60; break;
case 'minutes' : val = qty * 1000 * 60; break;
case 'seconds' : val = qty * 1000; break;
default : val = undefined; break;
}
return val;
},
format:function (timestamp){
var date = new Date(timestamp);
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hours = date.getHours();
var minutes = "0" + date.getMinutes();
var seconds = "0" + date.getSeconds();
// Will display time in xx/xx/xxxx 00:00:00 format
return formattedTime = month + '/' +
day + '/' +
year + ' ' +
hours + ':' +
minutes.substr(-2) +
':' + seconds.substr(-2);
}
};
Para usuarios lodash y subrayados , use _.now
.
var timestamp = _.now(); // in milliseconds
Moment.js puede abstraer mucho del dolor al tratar con las fechas de Javascript.
Ver: http://momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
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:
Date.now()
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í:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
Esto devolverá los milisegundos desde el tiempo de la época, por supuesto, no segundos.
forma más simple:
var timeStamp=event.timestamp || new Date().getTime();
event
viene. Debe dar una mejor explicación de la forma en que lo resuelve en lugar de escribir una respuesta. ¡Por favor!