Home > Net >  Google script matching tomorrows date with a google forms date input
Google script matching tomorrows date with a google forms date input

Time:10-13

I have tried to match tomorrow's date with the date that gets submitted via google form. in the logger it appears to match but it wont log YES and doesnt evaluate true.

My effort:

function ArchiveTuesdayOrder() {
  let dt = new Date();
  let t = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()   1);//default for items not provided in the constructor is zero
 
  const date = new Date();
  date.setDate(date.getDate()   1);
  var tom = Utilities.formatDate(date, "America/New_York", 'EEE MMM dd yyyy HH:mm:ss Z');
  var tomDate = Utilities.formatDate(date, "America/New_York", "MM-dd-yyyy");
  var sheetActive = SpreadsheetApp.openById("xxxxxxxxxxxxxx");
  var sheet = sheetActive.getSheetByName("xxxxxxxxxxxxxx");
  //var orderDate = sheet.getRange(2,3,100).getValues();
  var orderdateRange = sheet.getRange(2, 4, 100);
  var orderDate = orderdateRange.getValues();

  Logger.log(tom.substring(0,10))
  Logger.log(t);
  for (var i = 0; i < orderDate.length; i  ) {

  Logger.log(orderDate[i])
 if (t === orderDate[i]) {    // This is what I cant get to evaluate true- No Match
    Logger.log("YES" orderDate)
  }}}

CodePudding user response:

function tomorrow() {
  let dt = new Date();
  dt.setDate(dt.getDate()   1);
  Logger.log(dt);
  return dt.valueOf();//milliseconds can be used in numerical comparisons
}

function tomorrowstartofday() {
  let dt = new Date();
  let t = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()   1);//default for items not provided in the constructor is zero
  Logger.log(t);
  return t.valueOf();
}

Here's a small example of picking timestamp that occur within a day:

The fake data:

TimeStamp day type
10/11/2021 0:00:00 yesterday
10/11/2021 12:00:00 yesterday
10/12/2021 0:00:00 start of day
10/12/2021 12:00:00 today
10/13/2021 0:00:00 tomorrow
10/13/2021 12:00:00 tomorrow

The code:

function timestampsfortoday() {
  const dt = new Date();
  const tod = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();//today
  const tom = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()   1).valueOf();//tomorrow
  let ts = [];
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet0');
  const vs = sh.getRange(2,1,sh.getLastRow() - 1,2).getValues();
  vs.forEach(r => {
    let d = new Date(r[0]).valueOf();//using Date() constructor to get date value from timestamp
    if(d > tod && d < tom) {
      ts.push(r);
    }
  });
  Logger.log(ts.join('\n'))
}

The Execution Log:

9:58:44 AM  Notice  Execution started
9:58:46 AM  Info    Tue Oct 12 2021 12:00:00 GMT-0600 (Mountain Daylight Time),today
9:58:45 AM  Notice  Execution completed

It only picked the row with today in the second column because that's the only one between start of day today and start of day tomorrow.

If you use this line for the comparison in the loop:

if(d >= tod && d < tom)

You get this:

Execution log
10:05:58 AM Notice  Execution started
10:05:59 AM Info    Tue Oct 12 2021 00:00:00 GMT-0600 (Mountain Daylight Time),start of day
Tue Oct 12 2021 12:00:00 GMT-0600 (Mountain Daylight Time),today
10:05:59 AM Notice  Execution completed
  • Related