代码之家  ›  专栏  ›  技术社区  ›  Sampson

setInterval()的奇怪行为

  •  1
  • Sampson  · 技术社区  · 15 年前

    我正在尝试用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 回复  |  直到 15 年前
        1
  •  4
  •   Patrick McElhaney    15 年前

    你正在重置 today 每次调用函数时,尽管时间发生了变化,“今天”和“1983年的今天”之间的差异总是相同的。

    移动的分配 今天 超出了时间间隔,所以只设置了一次,对我有效。我看到数字每秒都在变化。

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

    它们都是每1000毫秒执行一次(每秒1次);但是第二次每次都会产生相同的值,即820540800000。我假设您还认识到,通过明智地使用“var”,可以避免污染全球名称空间。

        3
  •  0
  •   Andrejs Cainikovs    15 年前

    实际上,它按预期工作。等到午夜。

        4
  •  0
  •   annakata    15 年前

    我想你会发现它实际上一直在更新(只要在函数中添加一个警报就可以很容易地看到),你的问题是值是相同的 每一个 时间。

        5
  •  0
  •   Ori    15 年前

    问题是,您没有完全设置开始日期,只有年份。因此,每次执行间隔时,都要更新该日期的秒、分和小时数。要修复此问题,必须将其设置为特定的年、月、日、小时、分钟、秒和毫秒。

    这是部分工作,如果你坐在那里一整年,你会看到不同