Search code examples
javascriptdatetimegoogle-apps-scriptgoogle-sheetsdate-comparison

Google script matching tomorrows date with a google forms date input


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)
  }}}

Solution

  • 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