probably better to use a combination of setInterval and/or requestAnimationFrame and update when the seconds actually changes.. with the setTimeout loop, it will get a jarring 2s shift on occassion... more noticeable with a digital readout, but it will happen as you hit borderline timing on the second.