steak_ale_piethon
steak_ale_piethon

Reputation: 67

Add 1 day to date from spreadsheet via Google App Script / Javascript- Month Keeps Reseting to current month

I am trying to set up a Google App Script function that grabs a date (formatted dd/mm/yy) from the last column of a spread, and creates a new column with the date + one day.

I have seen previous solutions and tried to use the same, i.e.newDate.setDate(lastDate.getDate()+1) but have had issues getting the value formatted correctly in the script. This is a variation of my code that I'm using to loop through for a year's worth of values to see what I get:

for (var i=0;i<365;i++){

    var lastRow = outputSheet.getLastRow();
    var newDate = new Date();

    var lastDate = outputSheet.getRange(lastRow,1).getValue();
    var newDateRng = outputSheet.getRange(lastRow+1,1);
    Logger.log(lastDate + 1, typeof lastDate, typeof (lastDate + 1));
    newDate.setDate(lastDate.getDate());
    Logger.log(newDate);
    newDate.setDate((newDate.getDate() + 1));
    Logger.log(newDate);
    var newDateFormatted = Utilities.formatDate(newDate, ss.getSpreadsheetTimeZone(), "dd/MM/YY");
    Logger.log(newDateFormatted);
    newDateRng.setValue(newDateFormatted);
}

With a start date of "01/03/2020", I get the following behaviour:

01/03/2020

02/05/2020

03/05/2020

...

31/05/2020

01/06/2020

02/05/2020

03/05/2020

...

31/05/2020

01/06/2020

02/05/2020

...

etc. All the way through the year. Although the day increase, the month seems to reset after the first day of the month.

As a note, I am specifically looking to pick the date off of the spreadsheet rather than using new Date as today and new Date +1 as tomorrow.

Thanks

Upvotes: 0

Views: 1711

Answers (1)

Serge insas
Serge insas

Reputation: 46802

You need to use a different variable in the loop otherwise you will always return to the same month.

Also avoid using strings for the result, keep date objects and display it properly.

The code goes like this :

function otherTest(){
  var lastDate = SpreadsheetApp.getActiveSheet().getActiveCell().getValue();
  var date = new Date(lastDate); // create new date object
  var result = [];
  for (var i=0;i<365;i++){
    date=new Date(date).setDate(new Date(date).getDate()+1)
    Logger.log('date='+new Date(date))
    result.push([new Date(date)]);
  } 
  SpreadsheetApp.getActiveSheet().getRange(1,2,result.length,1).setValues(result).setNumberFormat('dd/MM/yyyy');
}

Upvotes: 2

Related Questions