He estado tratando de hacer que este contador muestre el día restante hasta una fecha establecida, luego muestre un mensaje en la fecha establecida y finalmente oculte el mensaje después de que haya pasado la fecha.
Esto es lo que tengo hasta ahora...
// Set the date we're counting down to var countDownDate = new Date("June 26, 2022 1:01:00").getTime(); // Update the count down every 1 second var x = setInterval(function () { // Get today's date and time var now = new Date().getTime(); // Find the distance between now and the count down date var distance = countDownDate - now; // Time calculations for days, hours, minutes and seconds var days = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); // Output the result in an element with id="countdown" if (distance > 0) { document.getElementById("countdown").innerHTML = days + " days until the June 30th, 2022"; } else if (distance == 0) { document.getElementById("countdown").innerHTML = "Time To Vote"; } else { document.getElementById("countdown").innerHTML = "EXPIRED"; } }, 1000);La secuencia de comandos anterior muestra la cuenta regresiva de los días restantes y "EXPIRADO" cuando finaliza el contador de fechas, pero no muestra el mensaje "Hora de votar" en el día establecido. ¡Gracias por tu ayuda!
Tengo un conocimiento limitado y una pequeña puntuación de reputación para comentar sobre lo que está haciendo, pero ¿también está teniendo en cuenta que la new Date().getTime() devuelve milisegundos de época?
Lo que significa que, si los milisegundos de la época de esa fecha no coinciden exactamente con los milisegundos de la época actual, no se ejecutará.
Entonces, la Época de la fecha puede ser (ejemplo) 1000 pero la época actual puede ser 1001, y no funcionaría.
Puede intentar hacer coincidir las unidades de tiempo individuales usando new Date().getHours() , new Date().getSeconds() , etc., para limitar cuánto debe verificar.
EDITAR: no lo he probado, y esta es probablemente una idea terrible, pero podría eliminar los últimos 5 dígitos de ambas marcas de tiempo de época dividiendo y llamando a .toFixed() o convirtiéndolo en una cadena y usando String.slice() , luego compararlos
puedes hacer algo como esto
var countDownDate = new Date("June 26, 2022 0:00:00").getTime(); // Update the count down every 1 second var x = setInterval(function() { // Get today's date and time var now = new Date().getTime(); // Find the distance between now and the count down date var distance = countDownDate - now; // Time calculations for days, hours, minutes and seconds var days = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); // Output the result in an element with id="countdown" if (days > 0) { const time = [hours, minutes, seconds].map(s => s.toString().padStart(2, '0')).join(':') document.getElementById("countdown").innerHTML = `${days} days and ${time} until the June 30th, 2022`; } else if (days === 0) { document.getElementById("countdown").innerHTML = "Time To Vote"; } else { document.getElementById("countdown").innerHTML = "EXPIRED"; } }, 1000); <div id="countdown"></div>