javascript - MomentJS possible bug with the add() function -
i'd add several months in array cannot add() function of momentjs work properly. here's how goes :
    function getmonths(begin, end){         var cursor = moment(begin);         var momentend = moment(end);         var arraymonths = [];         while(cursor.month() != momentend.month() || cursor.year() != momentend.year()){                     cursor.add(1, 'month'); // adds 1 month cursor             console.log(cursor.todate()); // because display cursor added month             arraymonths.push(cursor.todate()); // cursor being pushed doesn't have added month             console.log(arraymonths); // verified here         }                return arraymonths;     }   the console log shows cursor has been incremented (as add() mutator) proper value isn't added array.
i cannot figure out if issue in code or if inherent momentjs. have clue ?
thank !
the documentation todate says:
to native date object moment.js wraps, use moment#todate.
this return date moment uses, changes date cause moment change. if want date copy, use moment#clone before use moment#todate.
ie you're getting the same underlying date object every time call todate - ie each call add modifying it, , every member of array same object.
if documentation says, , use clone, code works:
arraymonths.push(cursor.clone().todate());   here's demo:
function getmonths(begin, end){    var cursor = moment(begin);    var momentend = moment(end);    var arraymonths = [];    while(cursor.month() != momentend.month() || cursor.year() != momentend.year()){              cursor.add(1, 'month'); // adds 1 month cursor      console.log(cursor.todate()); // because display cursor added month            //clone object before pushing, ensure it's not further modified      arraymonths.push(cursor.clone().todate());             console.log(arraymonths); // verified here    }           return arraymonths;  }              getmonths(moment('2016/01/01', 'yyyy/mm/dd'), moment('2017/01/01', 'yyyy/mm/dd'));  <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js"></script>  
Comments
Post a Comment