Javascript algorithm to count down a specific time

Asked

Viewed 86 times

0

I have code that shows me the current time working correctly and two input’s to enter the time and the minute I wish the remaining time until the time and the given minute to be calculated, the time I can calculate correctly but the minutes depending on the time it returns me a negative value

if (horaAtual <= nAcordarHora) {
                var auxHora = horaAtual - nAcordarHora
                //auxHora serve para transformar p número negativo para um número positivo
                //Multiplique qualquer número por -1 que o número se tornará positivo
                var resultHora = auxHora * -1
                //Calculando minuto
                if (minutoAtual <= nAcordarMinuto) {
                    var auxMinuto = minutoAtual - nAcordarMinuto
                    var resultMinuto = auxMinuto * -1
                    tempoRestante.innerHTML = `Você tem apenas ${resultHora}h:${resultMinuto}m`
                } else {
                    var auxMinuto = 60 - minutoAtual
                    var resultMinuto = auxMinuto - nAcordarMinuto
                    var resultHora = resultHora - 1
                    tempoRestante.innerHTML = `Você tem apenas ${resultHora}h:${resultMinuto}m primeiro if`
                }
                //Calculando hora
            } else {
                var auxHora = 24 - horaAtual
                var resultHora = auxHora + nAcordarHora
                //Calculando minuto
                if (minutoAtual <= nAcordarMinuto) {
                    var auxMinuto = minutoAtual - nAcordarMinuto
                    var resultMinuto = auxMinuto * -1
                    tempoRestante.innerHTML = `Você tem apenas ${resultHora}h:${resultMinuto}m`
                } else {
                    var auxMinuto = 60 - minutoAtual
                    var resultMinuto = auxMinuto - nAcordarMinuto
                    var resultHora = resultHora - 1
                    tempoRestante.innerHTML = `Você tem apenas ${resultHora}h:${resultMinuto}m dsdadada`
                }
            }
  • When nAcordarMinuto is smaller than minutoAtual, you have to add the minutes, not subtract. For example, the difference between 6:50 and 7:30 and 40 minutes. That is to say, 60-50 + 30 and not 60-50 - 30, how you’re doing.

  • Hmmm, I get it, I’m gonna try here!

1 answer

0

I suggest turning everything into seconds and then manipulating the result by time division. Here is a short example:

const horaAtual = new Date();
var nAcordarHora = new Date();
nAcordarHora.setDate(nAcordarHora.getDate() + 1); //adicionei 1 dia aqui
nAcordarHora.setHours(nAcordarHora.getHours() + 3); //adicionei 3h
nAcordarHora.setMinutes(nAcordarHora.getMinutes() + 30); //adicionei 30m
nAcordarHora.setSeconds(nAcordarHora.getSeconds() + 15); //adicionei 15s

const C_MINUTO = 60;
const C_HORA = C_MINUTO * 60;

const horaAtualValor = horaAtual.setMilliseconds(0); //convertendo em números (formato unix)
const nAcordarHoraValor = nAcordarHora.setMilliseconds(0); //convertendo em números (formato unix)
const intervaloEmSegundos = Math.floor((nAcordarHoraValor - horaAtualValor) / 1000);
const horasFaltando = Math.floor(intervaloEmSegundos / C_HORA);
const minutosFaltando = Math.floor((intervaloEmSegundos - (horasFaltando * C_HORA)) / C_MINUTO);
const segundosFaltando = (intervaloEmSegundos - (horasFaltando * C_HORA) - (minutosFaltando * C_MINUTO));

console.log('horaAtual: '+ horaAtual);
console.log('nAcordarHora: '+ nAcordarHora);
console.log('horaAtualValor: '+ horaAtualValor);
console.log('nAcordarHoraValor: '+ nAcordarHoraValor);
console.log('intervaloEmSegundos: '+ intervaloEmSegundos);
console.log('horasFaltando: ' + horasFaltando);
console.log('minutosFaltando: ' + minutosFaltando);
console.log('segundosFaltando: ' + segundosFaltando);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.