Pergunta

Eu estou tentando fazer um cálculo muito básico data-diferença com javascript, mas estou recebendo comportamento misto do setInterval ().

Isso atualiza constantemente:

var init = setInterval(function(){
  document.getElementById("txt").innerHTML = new Date();
}, 1000);

Mas isso só atualizações uma vez:

var init = setInterval(function(){
  var today = new Date();
  var started = new Date(); started.setYear(1983);
  var difference = today - started;
  document.getElementById("txt").innerHTML = difference;
}, 1000);

Eu não entendo. Se eu posso mostrar a data a cada segundo, por que não posso mostrar a diferença de datas a cada segundo?

Foi útil?

Solução

Você está redefinindo today cada vez que a função é chamada, por isso, enquanto as mudanças de tempo, a diferença entre "hoje" e "hoje de 1983" é sempre a mesma.

Mover a atribuição de today fora do intervalo, por isso só é definido uma vez, trabalhou para mim. Eu vejo o número mudando a cada segundo.

$(function () {
  today = new Date(); 
  var x = setInterval(function(){
    started = new Date(); started.setYear(1983);
    difference = today - started;
    document.getElementById("txt").innerHTML = difference;
  }, 1000); 
});    

Outras dicas

Ambos estão executando uma vez a cada 1000 ms (1 por segundo); no entanto o segundo resulta no mesmo valor cada vez, 820540800000. eu suponho que você também perceber que você pode evitar a poluição do espaço de nome global pelo uso criterioso de "var".

Na verdade, ele funciona como esperado. Basta esperar até meia-noite.

Eu acho que você vai encontrá-lo é realmente atualizar constantemente (facilmente visto por apenas colocar um alerta na função), o problema é que o valor é o mesmo todas tempo.

O problema é que você não está definindo a data começou totalmente, apenas o ano. Então você está atualizando segundos minutos e horas cada vez que o executa intervalo daquela data. Para corrigir isso, você deve configurá-lo para um ano específico, mês, dia, hora, minuto, segundo e milissegundo.

Esta é parcialmente trabalhar, se você ficou lá por um ano inteiro você veria a diferença

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top