2016-11-10 80 views
0

我对这个有点困惑。javascript数组日期错误

这段代码运行良好,但具有奇怪的行为。

var tmpcurdte = eval(dataSource[i].startDate); 
tmpcurdte.setDate(tmpcurdte.getDate() + 1); 

while (tmpcurdte < tmpenddte) { 
    console.log("block date: " + tmpcurdte); 
    blockdayarray[blockdayarray.length] = tmpcurdte; 
    console.log("blockdayarray: " + blockdayarray); 
    tmpcurdte.setDate(tmpcurdte.getDate() + 1); 
} 

输出

block date :Sat Nov 12 2016 00:00:00 GMT+0100 (CET) 
blockdayarray :**Sat Nov 12** 2016 00:00:00 GMT+0100 (CET) 
block date :Sat Dec 31 2016 00:00:00 GMT+0100 (CET) 
blockdayarray :**Sun Nov 13** 2016 00:00:00 GMT+0100 (CET),**Sat Dec 31** 2016 00:00:00 GMT+0100 (CET) 
block date :Sun Jan 01 2017 00:00:00 GMT+0100 (CET) 
blockdayarray :Sun Nov 13 2016 00:00:00 GMT+0100 (CET),**Sun Jan 01 2017** 00:00:00 GMT+0100 (CET),**Sun Jan 01 2017** 00:00:00 GMT+0100 (CET) 
block date :Sat Feb 04 2017 00:00:00 GMT+0100 (CET) 
blockdayarray :Sun Nov 13 2016 00:00:00 GMT+0100 (CET),Mon Jan 02 2017 00:00:00 GMT+0100 (CET),**Mon Jan 02 2017** 00:00:00 GMT+0100 (CET),Sat Feb 04 2017 00:00:00 GMT+0100 (CET) 

正如你可以看到,当我推一个新的阵列中的一个日期改变。任何人都可以帮助/解释这个?

+0

你为什么要做'eval'的事情? – ArsalanDotMe

+0

阅读下面。 THX花时间浏览我的代码:-) – user3242509

回答

1

这是因为您将相同的Date对象反复推入阵列并更改其状态。

相反,你要创建一个新Date对象第二天:

var tmpcurdte = eval(dataSource[i].startDate); 
tmpcurdte.setDate(tmpcurdte.getDate()+1); 

while (tmpcurdte < tmpenddte) { 
    console.log("block date :" + tmpcurdte); 
    blockdayarray[blockdayarray.length]=tmpcurdte; 
    console.log("blockdayarray :" + blockdayarray); 
    tmpcurdte = new Date(tmpcurdte.getTime());  // *** 
    tmpcurdte.setDate(tmpcurdte.getDate() + 1); 
} 

附注:我不是很确定你与该呼叫在做什么eval ,但几乎可以肯定有更好的方式去做任何你有这样做的事情。

+0

优秀,您的解决方案正常工作。 我也很难这是一个参考的东西,但无法弄清楚。 该eval是解析一个PHP返回的日期字符串作为日期对象。
我会改变它,但现在它工作正常。我需要这个日期对象在小部件 thx为您的帮助, B – user3242509

+0

对不起,我不能投票给你。 – user3242509