2015-10-16 93 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>