[英]How to compare dates to make sure Google Apps Script is only sending an alert once a day?
我在Google表格中有一個腳本,如果滿足特定條件,該腳本會發出警報。 我想觸發腳本每小時運行一次,但是,如果今天已經發出了警報,則我不想再發出一個警報(僅在第二天)。 實現此目標的最佳方法是什么?
我已經嘗試過幾種格式化日期的方法,但是到目前為止,對我來說唯一有效的方法是將date對象的年,月和日作為int並分別進行比較。
function sendAlert{
var now = new Date();
var yearNow = now.getYear();
var monthNow = now.getMonth() + 1;
var dayNow = now.getDate();
var sheet = SpreadsheetApp.getActive().getSheetByName('CHANGE_ALERT');
var sentYear = sheet.getRange("R2").getValue();
var sentMonth = sheet.getRange("S2").getValue();
var sentDay = sheet.getRange("T2").getValue();
if (yearNow != sentYear || monthNow != sentMonth || dayNow != sentDay) {
sendEmail();
var sentYear = sheet.getRange("R2").setValue(yearNow);
var sentMonth = sheet.getRange("S2").setValue(monthNow);
var sentDay = sheet.getRange("T2").setValue(dayNow);
else {
Logger.log('Alert was already sent today.');
}
}
我認為這種解決方案絕對不是最好的方法,但是我無法提出將日期合並為一個的另一種方法。 僅比較新的Date()無效,因為一天中的時間不一定相同。 如果我將日期格式設置為YYYY-MM-dd,它應該可以工作,但是當我再次從電子表格中獲取日期時,它將再次獲得完整日期和時間。
比較日期並發送電子郵件(如果今天尚未發送)。
function sendAlert() {
var sheet = SpreadsheetApp.getActive().getSheetByName('blank');
var cell = sheet.getRange(2,18); //cell R2
var date = new Date();
var alertDate = Utilities.formatDate(cell.getValue(), "GMT+0", "yyyy-MM-dd");
var currentDate = Utilities.formatDate(date, "GMT+0", "yyyy-MM-dd");
if (alertDate !== currentDate) {
sendEmail();
cell.setValue(date);
} else {
Logger.log('Alert was already sent today.');
}
}
如您所見,我刪除了您所有的年/月/日代碼,並將其替換為Utilities.formatDate()
,這使您可以按問題中指定的格式比較日期。 我還更改了if
語句來匹配它,因此現在我們只需要比較alertDate
和currentDate
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.