如何正确使用setInterval和clearInterval

时间:2018-08-17 20:20:25

标签: javascript

这是我编写的代码。

Function<String, List<T>> fruitFunction

我期望function formatDate(date) { var day; if (date.getDate() < 10) { day = "0" + date.getDate(); } else { day = date.getDate(); } var month; var tempMonth = date.getMonth() + 1; if ( tempMonth < 10){ month = "0" + tempMonth; } else { month = tempMonth; } var year = date.getFullYear(); return year + "-" + month + "-" + day; } Date.prototype.addDays = function(days) { var date = new Date(this.valueOf()); date.setDate(date.getDate() + days); return date; } jobDate = new Date(2016, 3, 7); endDate = new Date(2016, 4, 1); expireInterval = false; timeoutVar = setTimeout(runJobFromJS,1000); function runJobFromJS(){ var strDate = formatDate(jobDate); console.log(strDate); jobDate = jobDate.addDays(1); if (jobDate >= endDate){ clearInterval(timeoutVar); } } 可以打印从4月7日到5月01日的日期。但是它只打印一次。为什么strDate不能正常工作

2 个答案:

答案 0 :(得分:1)

您使用的是setTimeout(在以毫秒为单位的时间后执行一次功能),而不是setInterval(连续执行一个功能)。

setInterval的文档:

  

WindowOrWorkerGlobalScope mixin的setInterval()方法重复调用一个函数或执行一个代码段,每次调用之间有固定的时间延迟。它返回一个唯一标识该间隔的间隔ID,因此您以后可以通过调用clearInterval()将其删除。

setTimeout的文档:

  

WindowOrWorkerGlobalScope mixin的setTimeout()方法(以及window.setTimeout的后继方法)设置一个计时器,该计时器在计时器到期后执行一次功能或指定的代码。

timeoutVar = setInterval(runJobFromJS,1000);//not setTimeout

function runJobFromJS(){
  var strDate = formatDate(jobDate);
  console.log(strDate);

  jobDate = jobDate.addDays(1);

  if (jobDate >= endDate){
    clearInterval(timeoutVar);
  }
}

演示:

function formatDate(date) {
  var day;
  if (date.getDate() < 10) {
    day = "0" + date.getDate();
  } else {
    day = date.getDate();
  }

  var month;
  var tempMonth = date.getMonth() + 1;
  if ( tempMonth < 10){
    month = "0" + tempMonth;
  } else {
    month = tempMonth;
  }
  var year = date.getFullYear();

  return year + "-" + month + "-" + day;
}

Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

jobDate = new Date(2016, 3, 7);
endDate = new Date(2016, 4, 1);
expireInterval = false;

timeoutVar = setInterval(runJobFromJS,1000);

function runJobFromJS(){
  var strDate = formatDate(jobDate);
  document.getElementById("result").textContent = strDate;
  //console.log(strDate);

  jobDate = jobDate.addDays(1);

  if (jobDate >= endDate){
    clearInterval(timeoutVar);
  }
}
<span id="result"></span>

答案 1 :(得分:0)

您使用的是setTimeOut(仅执行一次),而不是setInterval()

  

setInterval()方法调用一个函数或计算一个表达式   以指定的时间间隔(以毫秒为单位)。 setInterval()方法将继续调用该函数,直到   调用clearInterval()或关闭窗口。

-

  

setTimeout()方法调用一个函数或计算一个表达式   在指定的毫秒数后。提示:该功能仅   执行一次。如果需要重复执行,请使用setInterval()   方法。

根据您的情况,尝试:

SHARED