Странное поведение от setInterval () - PullRequest
1 голос
/ 07 августа 2009

Я пытаюсь сделать очень простой расчет разницы дат с помощью JavaScript, но получаю смешанное поведение от setInterval ().

Это постоянно обновляется:

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

Но это обновляется только один раз:

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);

Я не понимаю. Если я могу показывать дату каждую секунду, почему я не могу показать разницу в датах каждую секунду?

Ответы [ 5 ]

4 голосов
/ 07 августа 2009

Вы сбрасываете today каждый раз, когда вызывается функция, поэтому при изменении времени разница между «сегодня» и «сегодня, 1983» всегда одинакова.

Перемещение присвоения today из интервала, так что оно устанавливается только один раз, сработало для меня. Я вижу, как число меняется каждую секунду.

$(function () {
  today = new Date(); 
  var x = setInterval(function(){
    started = new Date(); started.setYear(1983);
    difference = today - started;
    document.getElementById("txt").innerHTML = difference;
  }, 1000); 
});    
2 голосов
/ 07 августа 2009

Они оба выполняются один раз каждые 1000 мс (1 в секунду); однако второе приводит к одному и тому же значению каждый раз, 820540800000. Я полагаю, вы также понимаете, что вы можете избежать загрязнения глобального пространства имен путем разумного использования «var».

0 голосов
/ 07 августа 2009

Проблема в том, что вы не устанавливаете дату начала полностью, только год. Таким образом, вы обновляете минуты и часы этой даты каждый раз, когда выполняется интервал. Чтобы это исправить, вы должны установить конкретный год, месяц, день, час, минуту, секунду и миллисекунду.

Это частично работает, если вы сидите там целый год, вы увидите разницу

0 голосов
/ 07 августа 2009

Я думаю, вы обнаружите, что он на самом деле постоянно обновляется (это легко увидеть, просто вставив предупреждение в функцию), ваша проблема в том, что значение одинаково каждый раз.

0 голосов
/ 07 августа 2009

На самом деле все работает как положено. Просто подожди до полуночи.

...