这是我编写的代码。
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
不能正常工作
答案 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