function format(n) { return (n < 10 ? "0" + n : n); } var hour,min,sec,ms; function timer() { if ((millisecond += 1) == 100) { millisecond = 0; second++; } if (second == 60) { second = 0; minute++; } if (minute == 60) { minute = 0; hour++; } hour = format(hour); min = format(minute); sec = format(second); ms = format(millisecond); }Estoy usando este código para generar marcas de tiempo. Comprueba cómo es la salida:
00:00:00.01 00:00:00.02 ... 00:00:10.10 00:00:10.11 00:00:10.12 ... 00:02:05:01 00:02:05:02 ...¡Funciona perfectamente! Pero estoy usando setTimeout y esto a veces es muy impreciso. Entonces, mi idea es comenzar a trabajar con Date.Now() , pero cuando lo uso, obtengo algo como esto como respuesta:
00:00:00.02 00:00:00.05 00:00:00.07 ... 00:00:07.17 00:00:00.21 00:00:00.23 ...Funciona, pero no puedo captar cada milisegundo y segundo, ¡y esto no se ajusta a mis necesidades! ¿Entonces qué debo hacer? Aquí está el código:
var offset = 0, paused = true; render(); function startStopwatch(evt) { if (paused) { paused = false; offset -= Date.now(); render(); } } function stopStopwatch(evt) { if (!paused) { paused = true; offset += Date.now(); } } function resetStopwatch(evt) { if (paused) { offset = 0; render(); } else { offset = -Date.now(); } } function format(value, scale, modulo, padding) { value = Math.floor(value / scale) % modulo; return value.toString().padStart(padding, 0); } var min, sec, ms; function render() { var value = paused ? offset : Date.now() + offset; ms = format(value, 1, 1000, 3); sec = format(value, 1000, 60, 2); min = format(value, 60000, 60, 2); if(!paused) { requestAnimationFrame(render); } }¡Gracias!