Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

store date objects to array

I have two dates and want to save the days in between (plus start and end date) in an array

    var date1 = new Date("Sep 23, 2013 12:00:00"); // Monday
    var date2 = new Date("Sep 26, 2013 12:00:00"); // Thursday

    var alldates = [];

    for (var i=0; date1 <= date2; date1.setDate(date1.getDate() + 1), i++) {
        alldates.push(date1);
        }

    alert(alldates.join('\n'));

With this code alert(alldates.join('\n')); shows the following

    Fri Sep 27 2013 12:00:00 GMT+0200
    Fri Sep 27 2013 12:00:00 GMT+0200
    Fri Sep 27 2013 12:00:00 GMT+0200
    Fri Sep 27 2013 12:00:00 GMT+0200

I am new to Javascript and want to get further understanding, so thank you for any explanation why the alert does not show

    Mon Sep 23 2013 12:00:00 GMT+0200
    Tue Sep 24 2013 12:00:00 GMT+0200
    Wed Sep 25 2013 12:00:00 GMT+0200
    Thu Sep 26 2013 12:00:00 GMT+0200
like image 385
Thommy Avatar asked Apr 21 '26 21:04

Thommy


1 Answers

The problem you have is that you push references to the date1 object. When you change the date on it in your loop, you update the object, but all references still point to the same object.

You need to either push a text representation of your date, or a copy of your date1 object

for (var i=0; date1 <= date2; date1.setDate(date1.getDate() + 1), i++) {
    alldates.push(new Date(date1));
    }

alert(alldates.join('\n'));

As suggested, with a while loop

while( date1 <= date2 ) {
  alldates.push(new Date(date1));
  date1.setDate( date1.getDate() +1 );
} 
like image 85
jaudette Avatar answered Apr 23 '26 12:04

jaudette



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!