从setInterval的奇怪的行为()
-
12-09-2019 - |
题
我试图做的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);
我不明白这一点。如果我能显示日期每一秒,我为什么不能显示日期的差别每一秒?
解决方案
您正在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);
});
其他提示
它们都被每1000毫秒(1秒每)中执行一次;然而,在相同的值每次第二名的成绩,820540800000.我想你也知道,你可以避开合理使用的“变种”。
污染全局名字空间其实它按预期工作。只是等待,直到午夜。
我想你会发现它实际上是不断更新(很容易只是把警报在函数中看到的),你的问题是该值是相同的每一个的时间。
但问题是,你是不是完全设定开始日期,只有一年。所以你每次间隔执行时更新该日期的秒分钟和小时。为了解决这个问题,必须将其设置为一个特定的年,月,日,时,分,秒和毫秒。
这是部分的工作,如果你坐了整整一年,你会看到其中的差别。
不隶属于 StackOverflow