Самый эффективный способ создания часов, это использовать requestAnimationFrame. Ибо интервал крайне нестабильный и может сбиваться, плюс создает дополнительную и не нужную нагрузку, ибо продолжает работать при потере фокуса со страницы.
Вот тебе готовая функция с часами, которые будут точны до одного кадра. Первый вызов функции автоматический, после будет происходить на каждом обновлении экрана.
(time = () => {
let d = new Date();
let h = d.getHours();
let m = d.getMinutes();
let s = d.getSeconds();
h = h % 100 < 10 ? '0' + h : h;
m = m % 100 < 10 ? '0' + m : m;
s = s % 100 < 10 ? '0' + s : s;
document.getElementById('clock')
.textContent = `${h}:${m}:${s}`;
requestAnimationFrame(time);
})();
Конструкции if...else в данном случае можно значительно упростить, как и сам вывод.