transcurrido - saber el dia de la semana de una fecha javascript
¿Mejor forma de obtener tiempo en milisegundos en javascript? (6)
¿Existe una alternativa en JavaScript para obtener el tiempo en milisegundos utilizando el objeto de fecha, o al menos una forma de reutilizar ese objeto, sin tener que instanciar un nuevo objeto cada vez que necesito obtener este valor? Estoy preguntando esto porque estoy tratando de hacer un motor de juego simple en JavaScript, y cuando calculo el "tiempo de fotograma delta", tengo que crear un nuevo objeto de Fecha en cada fotograma. Aunque no estoy demasiado preocupado por las implicaciones de rendimiento de esto, estoy teniendo algunos problemas con la fiabilidad del tiempo exacto devuelto por este objeto.
Obtengo algunos "saltos" extraños en la animación, cada segundo más o menos, y no estoy seguro de si esto está relacionado con la recolección de elementos no utilizados de JavaScript o una limitación del objeto Date al actualizar tan rápido. Si configuro el valor delta en alguna constante, entonces la animación es perfectamente uniforme, por lo que estoy bastante seguro de que este "salto" está relacionado con la forma en que tengo el tiempo.
El único código relevante que puedo dar es la forma en que calculo el tiempo delta:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
Cuando calculo movimiento / animación, multiplico un valor constante con el tiempo delta.
Si no hay forma de evitar obtener el tiempo en milisegundos utilizando el objeto Date, una función que incrementa una variable (siendo el tiempo transcurrido en milisegundos desde el inicio del juego), y que se llama utilizando la función SetTimer a un ritmo de una vez cada milisegundos es una alternativa eficiente y confiable?
Edición: He probado ahora mi código en diferentes navegadores y parece que este "salto" solo es aparente en Chrome, no en Firefox. Pero aún sería bueno si hubiera un método que funcionó en ambos buscadores.
Esta es una pregunta muy antigua, pero aún como referencia si otros la están mirando, requestAnimationFrame()
es la forma correcta de manejar la animación en los navegadores modernos:
ACTUALIZACIÓN: El enlace de mozilla muestra cómo hacerlo - No tuve ganas de repetir el texto detrás del enlace;)
Hasta donde sé, solo puedes tener tiempo con Date .
Date.now es la solución, pero no está disponible en todas partes: Date.now() .
var currentTime = +new Date();
Esto le da la hora actual en milisegundos.
Para tus saltos Si calcula las interpolaciones correctamente de acuerdo con el tiempo de trama delta y no tiene un error de número de redondeo , apuesto por el recolector de basura (GC).
Si hay mucho objeto temporal creado en su ciclo, la recolección de elementos no utilizados debe bloquear el hilo para realizar una limpieza y una reorganización de la memoria.
Con Chrome, puede ver cuánto tiempo está gastando el GC en el panel Línea de tiempo .
EDITAR: desde mi respuesta, Date.now()
debe considerarse como la mejor opción, ya que es compatible en todas partes y en IE> = 9.
Prueba Date.now() .
La omisión es más probable debido a la recolección de basura. Por lo general, se puede evitar la recolección de basura mediante la reutilización de variables tanto como sea posible, pero no puedo decir específicamente qué métodos puede usar para reducir las pausas de recolección de basura.
Sé que este es un hilo bastante viejo, pero para mantener las cosas al día y ser más relevante, puedes usar la funcionalidad más precisa de performance.now()
para obtener un mejor tiempo de grano en javascript.
window.performance = window.performance || {};
performance.now = (function() {
return performance.now ||
performance.mozNow ||
performance.msNow ||
performance.oNow ||
performance.webkitNow ||
Date.now /*none found - fallback to browser default */
})();
Si tiene un objeto de fecha como
var date = new Date(''2017/12/03'');
luego hay un método incorporado en javascript para obtener la fecha en formato de milisegundos que es valueOf ()
date.valueOf(); //1512239400000 in milliseconds format
mejor manera y forma más corta de eco
var d = new Date();
var n = d.getTime();
alert (n);