может проще объект Date использовать, пусть сам считает?
<div id="time">
Таймер: <span id="day">0</span> : <span id='hour'>0</span> : <span id="min">0</span> : <span id="sec">0</span>
</div>
<script>
var d = new Date(2018, 0, 3, 23, 59, 5),
htmlTime = [document.getElementById('sec'), document.getElementById('min'), document.getElementById('hour'), document.getElementById('day')];
function time(){
htmlTime[3].innerHTML = d.getDate();
htmlTime[2].innerHTML = d.getHours();
htmlTime[1].innerHTML = d.getMinutes();
htmlTime[0].innerHTML = d.getSeconds();
d = new Date(d - 1000); // вычитаем 1000 милисекунд
}
time();
setInterval(time, 1000);
</script>