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