Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Lógica Tempo Relógio

Bom dia, estou fazendo uma aplicação para mudar o tempo do relógio de acordo com o fuso horário de sua escolha. No entanto, eu travei na seguinte lógica:

const setTime = () => {
  let { horas: hrs, minuto: min, segundos: seg } = getTime();

  seg === 60? 
  (seg = 0, min++): 
  seg <= 9?
  seg = `0${seg++}`:
  seg

  let time = `${hrs}:${min}:${seg}`;
  displayTime.textContent = time;
};

setInterval(setTime, 1000);

Por qual motivo há um incremento no segundo após o 09 se eu não coloquei seg++? Se eu colocar, o número 10 é pulado.

Desde já, agradeço a atenção!

8 respostas

Boa tarde!

seg = `0${seg++}`:

Você não colocou dentro da template string?

Sim, mas isso só é executado quando o "seg" for menor ou igual ao 9, justamente para colocar um 0 na frente e ficar um número de dois dígitos. A partir do 9 não fica com o 0 na frente, logo, o pedaço do código não está sendo executado e aparentemente não teria que haver um incrimento no "seg".

O que está acontecendo de fato? A string está ficando "010"?

Negativo, ela vai incrementando normalmente: 10, 11, 12... Eu só queria entender como isso é possível, sendo, que tem apenas a variável "seg" para ser executado após o número 9.

Tem como colocar o código completo em um gist no Github pra eu dar uma olhada?

https://gist.github.com/mbthales/f21399a4761780915cc73126fa848c4e

solução!

Opa, vi aqui qual é o problema:

Quando você executa a função getTime, retorna os segundos atualizados.

Quando você define o setInterval, está executando tudo o que está ali a cada segundo (incluindo a função getTime). Ao executar a função novamente, você pega o valor dos segundos novamente (tornando desnecessário incrementar manualmente).

Para fazer o contador manualmente, você deveria ter um estado global e ir incrementando a cada um segundo. Da forma que você fez, ele apenas pega a hora atual a cada segundo, tornando o contador desnecessário.

Não sei se consegui explicar direito, mas o resumo é esse aí. Se ainda estiver com dúvidas, diga qual parte não entendeu e eu tento explicar melhor :)

É isso mesmo, agora entendi. Muito obrigado pela ajuda!