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

4159
pupeno 2008-10-21 23:29.

¿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.

30 answers

5101
daveb 2008-10-21 23:32.

Corto y elegante:

+ new Date()

Un operador unario como plusactiva el valueOfmétodo en el Dateobjeto 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 Dateobjeto 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 valueOfmé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());

539
xer0x 2011-02-18 14:33.

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()
283
Daithí 2011-05-12 12:27.

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();
152
Staale 2008-10-22 00:05.
var time = Date.now || function() {
  return +new Date;
};

time();
135
GottZ 2012-07-12 21:15.

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 |0magia. Úselo en su Math.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 |0hace:

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() / 1000en 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.nowsiga este enlace: Date.now()@ MDN

93
aemkei 2008-10-22 03:00.
var timestamp = Number(new Date()); // current time as number
60
VisioN 2013-03-16 04:19.

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/

47
Joaquinglezsantos 2016-01-30 05:08.

Además de las otras opciones, si desea un formato de fecha ISO, puede obtenerlo directamente

console.log(new Date().toISOString());

45
Tom Viner 2009-05-01 06:53.

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch

43
live-love 2012-09-22 09:12.

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;
}
42
Alireza 2017-05-20 18:49.

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();
33
Kamil Kiełczewski 2018-06-28 06:33.

Rendimiento

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

  • La solución 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 navegadores
  • La solución performance.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.
  • Las soluciones C, D, F son bastante lentas en todos los navegadores

Detalles

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

30
Belldandu 2014-03-31 22:18.

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();
27
Salman A 2012-05-03 23:02.

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, floorsi 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.

26
Valentin Podkamennyi 2015-10-15 06:41.

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 | 0como reemplazo de la Math.floor()función. También es bueno recordar que 1E3es un equivalente más corto de 1000(se prefiere la E mayúscula que la minúscula para indicar 1E3como una constante).

Como resultado, obtienes lo siguiente:

var ts = new Date / 1E3 | 0;

console.log(ts);

22
iter 2015-07-06 14:01.

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.nowsolo cede 1436140826653.

21
FullStack 2015-07-14 22:29.

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.jsen 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

21
Jitendra Pawar 2016-03-16 19:45.

Solo puedes usar

    var timestamp = new Date().getTime();
    console.log(timestamp);

para obtener la marca de tiempo actual. No es necesario hacer nada adicional.

20
deepakssn 2013-05-21 23:22.

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())));
}
20
blueberry0xff 2015-09-30 03:55.

// 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>

16
mr.boyfox 2013-05-09 20:53.

Cualquier navegador que no sea compatible con Date.now, puede usar esto para obtener la fecha y hora actual:

currentTime = Date.now() || +new Date()
14
Anoop P S 2013-07-01 20:47.

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();
14
george 2015-03-11 23:52.

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;
14
Kevin Leary 2015-05-30 03:40.

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=245521377donde 245521377está 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.

14
Ronnie Royston 2015-10-09 16:03.

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);
            }
};
14
cenkarioz 2019-05-19 10:43.

Si es para fines de registro, puede usar ISOString

new Date().toISOString()

"2019-05-18T20: 02: 36.694Z"

12
Muhammad Reda 2015-03-30 22:40.

Para usuarios de lodash y subrayado , utilice _.now.

var timestamp = _.now(); // in milliseconds
10
Rimian 2015-03-06 14:33.

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();
9
Olemak 2017-12-15 00:09.

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

8
Vicky Gonsalves 2013-10-26 17:51.

forma más sencilla:

var timeStamp=event.timestamp || new Date().getTime();

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

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.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

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.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

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 láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

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?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

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!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Actualice a un Sonicare por tan solo $ 30

Actualice a un Sonicare por tan solo $ 30

¿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.

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

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.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

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á eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

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.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

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.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

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

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

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".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

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.

India me está pateando el culo

India me está pateando el culo

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.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language