Javascript setInterval()中的奇怪行为

Javascript setInterval()中的奇怪行为,javascript,datetime,setinterval,Javascript,Datetime,Setinterval,我试图用javascript做一个非常基本的日期差计算,但是我从setInterval()得到了混合行为 这种情况不断更新: var init = setInterval(function(){ document.getElementById("txt").innerHTML = new Date(); }, 1000); 但这只会更新一次: var init = setInterval(function(){ var today = new Date(); var started

我试图用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);

我不明白。如果我可以每秒显示一次日期,为什么我不能每秒显示一次日期的差异呢?

每次调用该函数时,您今天都在重置
,因此当时间发生变化时,“今天”和“今天,1983”之间的差异总是相同的

今天的作业
移出间隔,因此只设置一次,对我来说很有效。我看到数字每秒钟都在变化

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

每次调用函数时,您都会重置
today
,因此当时间发生变化时,“today”和“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); 
});    

实际上,它的工作原理与预期相符。只要等到午夜。

事实上,它工作正常。只要等到午夜。

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

它们都是每1000毫秒执行一次(每秒1次);但是,第二个结果每次都是相同的值,即820540800000。我假设您也意识到,明智地使用“var”可以避免污染全局名称空间。

我想您会发现它实际上在不断更新(只需在函数中添加一个警报就可以很容易地看到),您的问题是每次值都是相同的。

我想您会发现它实际上在不断更新(只需在函数中添加警报即可轻松查看),您的问题是每次的值都是相同的。

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


这是部分起作用的,如果你坐在那里整整一年,你会看到不同之处

问题是你没有完全设置开始日期,只设置年份。因此,每次间隔执行时,你都会更新该日期的秒、分、时。要解决这个问题,你必须将其设置为特定的年、月、日、时、分、秒毫秒



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

对不起,这意味着要写init。但是不,它不会影响结果。Date对象不总是得到默认值作为当前日期/时间吗,因此,由于你只更改了年份值,差异总是一样的…26年。我认为你欠它的添加[facepalm]标签的社区Jonathan:PAnnakata,我同意。今天是“其中的一天”。呵呵。还有一件事:setYear由于与Netscape Navigator 3和Internet Explorer 3有关的千年虫问题而被弃用;您应该改用setFullYear(必要时使用getFullYear)。抱歉,本打算写init。但不,它不会影响结果。Date对象不总是以默认值作为当前日期/时间吗?因此,由于您只更改年份值,因此差异总是相同的…26年。我认为您应该向社区添加[facepalm]标记Jonathan:PAnnakata,我同意。今天是“有一天。”呵呵。还有一件事:setYear被弃用了,因为与千年虫相关的问题可以追溯到Netscape Navigator 3和Internet Explorer 3;您应该使用setFullYear(必要时使用getFullYear)。这很奇怪。修复了问题,但毫无意义:)如果我每次都不断地指定日期,那又有什么关系呢?我扩展了我的解释。希望现在更有意义了。:-@Jonathan-因为A+B和A之间的区别总是B,不管A的值是多少。啊,我现在明白了。我脑子里一直在想今天是YYYY/MM/DD-我太傻了:)谢谢你容忍这个年轻的mi你很好地容忍了我的“int”是个保留字,“所以我想我们扯平了。”——)真奇怪。解决了这个问题,但毫无意义:)如果每次我总是指定日期,那又有什么关系呢?我扩展了我的解释。希望现在更有意义。:-)@乔纳森-因为A+B和A之间的差总是B,不管A的值是多少。啊,我现在明白了。我脑子里一直想今天是YYYY/MM/DD——我太傻了:)谢谢你容忍了这个幼稚的错误。你很好地容忍了我的“int是一个保留字”,所以我想我们扯平了。;-)