日付が 10 日後かどうかを知る最も簡単な方法は、おそらくミリ秒を数えることです。
冗談のように聞こえるかもしれませんが、そうではありません;-)
例 :
function test(){
var today = new Date();
var tendaysBefore = new Date(today.getTime()-10*24*60*60*1000);// 10 times 24 hours
Logger.log(today+' is 10 later than '+tendaysBefore);
}
メソッド getTime() は、基準日からのミリ秒数を返します。これは 2070 年まで機能するので、今のところ安全に使用できると思います ;-)
トリガーの問題は、コーネリアスの回答thxですでに解決されています
編集:ここにあなたが望むことをするための可能なコードがあります:(あなたのシートでテストされています)
var sh = SpreadsheetApp.getActiveSheet();
var ss = SpreadsheetApp.getActiveSpreadsheet();// replace these with openbyId''ID') and getSheetByName(name) when you run it with trigger since the sheet wil be 'closed'
var lastrow = ss.getLastRow();
function onOpen() {
var menuEntries = [ {name: "check late paiments", functionName: "test"},
{name: "send mails to tagged users", functionName: "mailunpaid"},
];
ss.addMenu("custom functions",menuEntries);// custom menu
}
function test(){ // check column D and set it to "no" if not paid
var paidcol = sh.getRange(2, 4, lastrow-1, 1).getValues();//read only col D
for(nn=0;nn<paidcol.length;++nn){
if(paidcol[nn][0].toString().toLowerCase().match('yes')!='yes'){
paidcol[nn][0]='no'
}
}
sh.getRange(2, 4, lastrow-1, 1).setValues(paidcol);// write back to sheet
}
function mailunpaid(){
var data = sh.getDataRange().getValues();//read the whole sheet in an array, col D is idx3, timestamp is idx0 email is idx 23
var today = new Date();
var tendaysBefore = new Date(today.getTime()-10*24*60*60*1000);// 10 times 24 hours
for (nn=1;nn<data.length;++nn){ // iterate from row 2 to end ie idx 0 to last
// Logger.log(data[nn][3]+' '+data[nn][0])
if(data[nn][0]<=tendaysBefore && data[nn][3]=='no'){
// MailApp.sendEmail(data[nn][23], 'subject', 'body'); // you have to define the mail subject & content somewhere ;-) and uncomment when finished your tests
Logger.log('row '+Number(nn+1)+' = to send because '+data[nn][0])
sh.getRange(nn+1,4).setValue('SENT');// tag this user to know that mail has been sent to avoid multiple emails
}
}
}
わかりやすくするためにコードを2つの関数に分割しましたが、トリガーとして実行する場合は、両方の関数を1つにまとめて自動チェックを行う必要があります...