2016-11-10 78 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