Javascript 将JS循环行为与日期混淆
下面的代码(我从中进行了调整)尝试在2/5/13到2/10/13的范围内循环,包括两个端点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
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会更改日期实例?我没有。。。哎呀