setInterval
нельзя использовать для этой задачи. Его точность не соответствует, он нужен для другого и работает по другому.
Если нужна точность - то нужно использовать
Date
.
Пример
Алгоритм примерно такой:
1. При первом нажатии на кнопку, вы запоминаете дату
2. При втором нажатии на кнопку, вы запоминаете новую дату
3. Теперь достаточно преобразовать обе даты в число, и вычесть из более новой даты, более старую.
const btn = document.querySelector('[data-timer-button]');
const result = document.querySelector('[data-timer]');
let timerStart, timerEnd;
let isRunning = false;
btn.addEventListener('click', () => {
if (isRunning) {
isRunning = false;
timerEnd = new Date().valueOf();
result.innerHTML = `${timerEnd - timerStart} ms`;
} else {
isRunning = true;
timerStart = new Date().valueOf();
result.innerHTML = 'running...';
}
})