¿Cómo puedo obtener una marca de tiempo en JavaScript?
Algo similar a la marca de tiempo de Unix , es decir, un solo número que representa la fecha y hora actuales. Ya sea como un número o una cadena.
+ 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 excepción notable a esto es IE8 y versiones anteriores (consulte la tabla de compatibilidad ).
Sin embargo, puede hacer una calza fácilmente 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 puede usar:
Date.now() / 1000 | 0
Lo que debería ser un poco más rápido, pero también menos legible ( consulte también esta respuesta ).
Recomendaría usar Date.now()
(con cuña de compatibilidad). Es un poco mejor porque es más corto y no crea un Date
objeto nuevo . Sin embargo, si no desea un ajuste y una compatibilidad máxima, puede usar el método "antiguo" para obtener la marca de tiempo en milisegundos :
new Date().getTime()
Que luego puede 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());
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()
JavaScript funciona con la cantidad de milisegundos desde la época, mientras que la mayoría de los otros lenguajes 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 los milisegundos.
Esto le dará una marca de tiempo de 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();
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. Úselo 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 empezar 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 eliminarlo 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 serle útil si necesita realizar operaciones binarias en marcas de tiempo después de que int32 se rompa 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 usar $.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 a favor esta respuesta ya que no la encontré yo mismo.
Ahora una pequeña explicación de lo que |0
hace:
Al proporcionar |
, le indica al intérprete que realice una operación OR binaria. Las operaciones de bits requieren números absolutos que convierten el resultado decimal Date.now() / 1000
en un entero.
Durante esa conversión, los decimales se eliminan, lo que da como resultado el mismo resultado que usar Math.floor()
pero con menos código.
Sin embargo, tenga cuidado: convertirá un doble de 64 bits en un entero de 32 bits. Esto resultará en una pérdida de información cuando se trate de grandes números. Las marcas de tiempo se romperán después de 2038 debido a un desbordamiento de enteros de 32 bits.
Para obtener más información sobre Date.now
siga este enlace: Date.now()
@ MDN
var timestamp = Number(new Date()); // current time as number
jQuery proporciona su propio método para obtener la marca de tiempo:
var timestamp = $.now();
(además de que solo implementa (new Date).getTime()
expresión)
ÁRBITRO: http://api.jquery.com/jQuery.now/
Además de las otras opciones, si desea un formato de fecha ISO, puede obtenerlo directamente
console.log(new Date().toISOString());
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
Solo para agregar, 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;
}
Date , 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 de la computadora 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 a las 00:00:00 UTC.
Debido a que now () es un método estático de Date, siempre lo usa como Date.now ().
Si usa una versión por debajo de ES5, Date.now();
no funciona y necesita usar:
new Date().getTime();
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 la 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ápida que otras soluciones en Firefox, pero la más lenta en Chrome.Resultados para chrome
Puede realizar la prueba en su máquina AQUÍ
El código utilizado en las pruebas se presenta en el siguiente fragmento
function A() {
return new Date().getTime();
}
function B() {
return new Date().valueOf();
}
function C() {
return +new Date();
}
function D() {
return new Date()*1;
}
function E() {
return Date.now();
}
function F() {
return Number(new Date());
}
function G() {
// this solution returns time counted from loading the page.
// (and on Chrome it gives better precission)
return performance.now();
}
// TEST
log = (n,f) => console.log(`${n} : ${f()}`);
log('A',A);
log('B',B);
log('C',C);
log('D',D);
log('E',E);
log('F',F);
log('G',G);
This snippet only presents code used in external benchmark
Uno que no he visto todavía
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();
El Date.getTime()
método se puede utilizar 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 por 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 el objeto de fecha para lograr resultados idénticos. En mi opinión, este enfoque afecta la legibilidad.
El código Math.floor(new Date().getTime() / 1000)
se puede abreviar a new Date / 1E3 | 0
.
Considere omitir la getTime()
invocación directa y utilizarlo | 0
como reemplazo de la Math.floor()
función. También es bueno recordar que 1E3
es un equivalente más corto de 1000
(se prefiere la E mayúscula que la minúscula para indicar 1E3
como una constante).
Como resultado, obtienes lo siguiente:
var ts = new Date / 1E3 | 0;
console.log(ts);
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 cede 1436140826653
.
Recomiendo encarecidamente usar 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 de UNIX, haga
moment().unix()
También puede convertir tiempos como este:
moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()
Hago eso 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
Solo puedes usar
var timestamp = new Date().getTime();
console.log(timestamp);
para obtener la marca de tiempo actual. No es necesario hacer nada adicional.
Aquí hay una función simple para generar una 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())));
}
// 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()
Este tiene una solución: que convierte unixtime stamp a tim en js prueba esto
var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
Aprendí una forma realmente genial de convertir un objeto Date dado a una marca de tiempo Unix desde el código fuente de JQuery Cookie el otro día.
He aquí 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á usando esto para romper el caché en un entorno de host local. 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 encontré 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);
}
};
Si es para fines de registro, puede usar ISOString
new Date().toISOString()
"2019-05-18T20: 02: 36.694Z"
Para usuarios de lodash y subrayado , utilice _.now
.
var timestamp = _.now(); // in milliseconds
Moment.js puede eliminar gran parte del dolor al lidiar con las fechas de Javascript.
Ver: http://momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
Al momento de escribir esto, la respuesta principal es de 9 años, y muchas cosas han cambiado desde entonces; no menos importante, tenemos soporte casi universal para una solución no pirateada:
Date.now()
Si desea estar absolutamente seguro de que esto no se romperá en algún navegador antiguo (anterior a ie9), puede ponerlo detrás de un cheque, así:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
Esto devolverá los milisegundos desde el tiempo de época, por supuesto, no los segundos.
Documentación de MDN en Date.now
forma más sencilla:
var timeStamp=event.timestamp || new Date().getTime();
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
¿Quiere probar un cepillo de dientes Sonicare sin gastar mucho dinero en uno de sus modelos favoritos de gama alta? Puede comprar un kit de la Serie 2 o Serie 3 por tan solo $ 30 hoy en Amazon. Haga clic aquí para ver la lista completa de modelos elegibles y tenga en cuenta que se descontarán $ 10 adicionales en su carrito.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.
Un minorista está enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.