簡體   English   中英

如何比較日期以確保Google Apps腳本每天僅發送一次警報?

[英]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語句來匹配它,因此現在我們只需要比較alertDatecurrentDate


參考文獻:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM