quería construir un reloj y mi único problema aquí es que setInterval básicamente no funciona. Me estoy perdiendo de algo
const timer = document.getElementById("container") let currentTime = new Date() let hours = currentTime.getHours() let minutes = currentTime.getMinutes() let seconds = currentTime.getSeconds() function time () { let hoursIf = hours.toString().length==1 ? "0"+hours : hours let minutesIf = minutes.toString().length==1 ? "0"+ minutes : minutes let secondsIf = seconds.toString().length==1 ? "0" +seconds : seconds timer.textContent = `${hoursIf}:${minutesIf}:${secondsIf}` } time() let run = setInterval(time, 1000)Funciona, confía en mí. El problema es la asignación en:
let hours = currentTime.getHours() let minutes = currentTime.getMinutes() let seconds = currentTime.getSeconds()Está asignando tiempo una vez al principio y no verifica los valores actualizados más adelante. Si pusiera eso en su función de tiempo, funcionaría correctamente. Algo como esto:
function time () { let currentTime = new Date() let hours = currentTime.getHours() let minutes = currentTime.getMinutes() let seconds = currentTime.getSeconds() let hoursIf = hours.toString().length==1 ? "0"+hours : hours let minutesIf = minutes.toString().length==1 ? "0"+ minutes : minutes let secondsIf = seconds.toString().length==1 ? "0" +seconds : seconds timer.textContent = `${hoursIf}:${minutesIf}:${secondsIf}` } time() let run = setInterval(time, 1000)No estás actualizando tus variables. Los tiene como globales, pero nunca actualiza sus valores, por lo que el método "tiempo" sigue usando los mismos valores.
let currentTime = new Date() let hours = currentTime.getHours() let minutes = currentTime.getMinutes() let seconds = currentTime.getSeconds() Estos deben configurarse en su método o al menos actualizarse a los valores actuales. De lo contrario, simplemente vuelve a mostrar la misma hora cada time se ejecuta.
Si coloca un "Console.log" en su método, apuesto a que verá que se ejecuta, simplemente no actualiza la hora como esperaba.