2015-10-16 64 views
0

我有一個非常基本的循環試圖DATEADD與Moment.js並獲得奇怪的結果

console.log(thisStart); 
console.log(thisEnd); 
console.log(thisDate); 
while(checkcounter < 10){ 
    console.log(checkcounter); 
    thisDate = moment(thisDate,'MM/DD/YYYY').add(1,'days').toDate('MM/DD/YYYY'); 
    console.log(thisDate); 
    checkcounter++; 
} 

我期望給我,第二天格式化MM/DD/YYYY,而是第一次迭代的第二天,但它跳了6個月。

作爲一個新的Momemnt.js用戶我不知道我要去的地方錯了

enter image description here

+0

'.toDate()'輸出一個JavaScript'Date',而不是一個'string'。 'MM/DD/YYYY'將被忽略,當你試圖在第二次迭代中解析它時,它不是格式爲'MM/DD/YYYY''的字符串,所以第二次迭代將產生意外結果。 – Claies

+1

我想你想在這裏使用'.format()'而不是'.toDate()'。 – Claies

回答

0

的問題是在循環中的語句:

thisDate = moment(thisDate,'MM/DD/YYYY').add(1,'days').toDate('MM/DD/YYYY'); 

第一個錯誤是當第一個參數是Date對象時,將格式字符串傳遞給moment構造函數。 As described here,你需要傳遞一個格式字符串只有第一個參數是包含日期的字符串:

thisDate = moment(thisDate).add(1,'days').toDate('MM/DD/YYYY'); 

add調用是正確的,但doDate一個不是。功能toDatedoes not take in input a format string

thisDate = moment(thisDate).add(1,'days').toDate(); 

這裏的代碼的完整片段:

var thisDate = new Date(), 
 
    checkcounter = 0; 
 

 
console.log('Init:', thisDate); 
 
while (checkcounter < 10) { 
 
    console.log('Check counter:', checkcounter); 
 
    thisDate = moment(thisDate).add(1, 'days').toDate(); 
 
    console.log('thisDate:', thisDate); 
 
    checkcounter++; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.js"></script>