Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JS循环行为与日期混淆_Javascript_Loops_Date - Fatal编程技术网

Javascript 将JS循环行为与日期混淆

Javascript 将JS循环行为与日期混淆,javascript,loops,date,Javascript,Loops,Date,下面的代码(我从中进行了调整)尝试在2/5/13到2/10/13的范围内循环,包括两个端点 var start = new Date("02/05/2013"); var end = new Date("02/10/2013"); var output = []; var loop = new Date(start); alert(loop) while(loop < end){ output.push(loop); var newDate = lo

下面的代码(我从中进行了调整)尝试在2/5/13到2/10/13的范围内循环,包括两个端点

var start = new Date("02/05/2013");
var end = new Date("02/10/2013");

var output = [];
var loop = new Date(start);
alert(loop)
while(loop < end){           
    output.push(loop);
    var newDate = loop.setDate(loop.getDate() + 1);
    loop = new Date(newDate);
}
var strings = JSON.stringify(output);

var pgraf = document.createElement('p');
var ptext = document.createTextNode(strings)
pgraf.appendChild(ptext)
document.body.appendChild(pgraf);
var开始=新日期(“2013年5月2日”);
var结束=新日期(“2013年10月2日”);
var输出=[];
var循环=新日期(开始);
警报(循环)
而(循环<结束){
输出推送(循环);
var newDate=loop.setDate(loop.getDate()+1);
循环=新日期(newDate);
}
var strings=JSON.stringify(输出);
var pgraf=document.createElement('p');
var ptext=document.createTextNode(字符串)
pgraf.appendChild(ptext)
文件.正文.附件(pgraf);
然而,出于某种原因,我不明白,虽然循环前的警报会像人们预期的那样发出2/5/13的警报,但实际输出数组中的第一项是2/6/13。因此,最终附加到dom的字符串是

[“2013-02-06T07:00:00.000Z”、“2013-02-07T07:00:00.000Z”、“2013-02-08T07:00:00.000Z”、“2013-02-09T07:00:00.000Z”、“2013-02-10T07:00:00.000Z”]

这就是谜团

谜团#2:我试图将这段代码精简一点,将从创建输出数组到循环结束的所有内容替换为:

var output = [start];
while(start < end){           
    var newDate = start.setDate(start.getDate() + 1);
    start = new Date(newDate);
    output.push(start);
var输出=[start];
while(开始<结束){
var newDate=start.setDate(start.getDate()+1);
开始=新日期(newDate);
输出。推送(启动);
}

但这一次,输出更为奇怪:它根本不包含start变量的初始值,而是两次包含最后一个值

[“2013-02-06T07:00:00.000Z”、“2013-02-07T07:00:00.000Z”、“2013-02-08T07:00:00.000Z”、“2013-02-09T07:00:00.000Z”、“2013-02-10T07:00:00.000Z”、“2013-02-10T07:00:00.000Z”]


很明显,我不明白这里发生了什么。但我已经用非JS语言编程好几年了——我喜欢认为我了解循环是如何工作的!有人能告诉我我在搞什么鬼吗

在while循环的最后一行中修改的
loop
变量仍然是在开始时插入数组的
loop

如果您创建了一个新的日期(循环),并插入该日期,则不会产生副作用

setDate
修改调用它的日期,以便在不需要循环时使用第三行


最后,如果您想同时包含开始和结束,请使用
请阅读您是否知道setDate会更改日期实例?我没有。。。哎呀