Если нужно точное время - то это не лучшая идея. setInterval и setTimeout имеют лаги, которые начнут проявляться на дистанции.
Самый простой таймер это "текущее время - время запуска таймера". Таким образом, хранить надо не текущее положение счетчика, а время начала отсчета. А вот отрисовывать его да, по интервалу.
т.е.:
const startTime = newDate().now()
setinterval(()=>{
formatTimeToYourNeeds(new Date().now() - startTime)
}, 1000)
При таком раскладе вы не только получаете точный таймер, но и возможность изменять его, например выводить с точностью нужной точностью и интервалом