Как остановить выполнение программы, если дата не является сегодняшней датой в Google Apps Script - PullRequest
0 голосов
/ 26 мая 2020

то, что я пытаюсь сделать, - это проверить, не превышает ли дата в столбце RT C дату в столбце «Начальная дата, увиденная доктором» на 90 дней. Я уже сделал это, используя формулы Листа. Прекрасно работает. Но затем я хочу сравнить эту дату в столбце L, чтобы увидеть, совпадает ли сегодняшняя дата (дата компьютера) с этой датой в столбце L. Если да, я хочу отправить электронное письмо.

Пока все работает. Но вот небольшая проблема. Как вы можете видеть на изображении ниже, первая запись показывает, что дата в столбце RT C - 21.07.20, что не совпадает с сегодняшней датой 26.05.20, но я все еще получаю электронное письмо для этой записи, в котором говорится: вместе с пациентом.

Есть ли что-нибудь исправить?

введите описание изображения здесь

    function ifItsBeen90Days() 
               {
                var ss = SpreadsheetApp.getActiveSpreadsheet();
                sheet = ss.getSheetByName("PAOS");
                range = sheet.getDataRange();
                values = range.getValues();
      
                var lR = sheet.getLastRow();
      var dateinfo = sheet.getRange('L3:L').offset(0, 0, lR, 1).getValues();
      var today = new Date();
      var y0 = today.getFullYear();
      var m0 = today.getMonth() + 1;
      var d0 = today.getDate(); 
      
      for (var i=0; i<dateinfo.length; i++){
        x = Date.parse(dateinfo[i]);
        var date = new Date(x);
        var y = date.getFullYear();
        var m = date.getMonth() + 1;
        var d = date.getDate();
        if (y0 === y && m0 === m && d0 === d) {
          SendItIf90daysPast();
        } else {
          Logger.log("error:" + i)  // difference date
        };
      };
    }   
    
    function SendItIf90daysPast(){
      const ss = SpreadsheetApp.getActiveSheet();
      const dataRange = ss.getDataRange();
      const headers = 2;
      const dataValues=ss.getRange(3,1,ss.getLastRow()-2,ss.getLastColumn()).getValues();
      dataValues.forEach(function(row){
        if(row[11] !== "") {
          let message = " It's been 90 days since your last visit with the following Patient.  " + '\n' +
                        " Can you please do a follow visit with this Patient? " + '\n' + '\n' +
                        " Thank you for your time and effort. " + '\n' +
                        " _______________________________________________________________ " + '\n' + 
                        " Patient#: " + row[0] + '\n' + 
                        " Patient Name: " + row[1] + '\n' + 
                        " P-Code: " + row[2] + '\n' + 
                        " PAO/INF: " + row[3] + '\n' + 
                        " Score 1: " + row[4] + '\n' + 
                        " Score 1 Date: " + new Date(row[5]).toLocaleDateString("en-US") + '\n' +  
                        " Score 2: " + row[6] + '\n' + 
                        " Score 2 Date: " + new Date(row[7]).toLocaleDateString("en-US") + '\n' +
                        " Tx Plan Entry Date: " + new Date(row[8]).toLocaleDateString("en-US") + '\n' +
                        " First Date: " + new Date(row[9]).toLocaleDateString("en-US") + '\n' +
                        " Initial Date Seen by DR: " + new Date(row[10]).toLocaleDateString("en-US") + '\n' +
                        " RTC: " + new Date(row[11]).toLocaleDateString("en-US") + '\n' +
                        " Notes: " + row[13];
          let email = row[12];
          let subject = 'Encrypt: Please Follow Up With Patient:' + " " + row[1] + " Patient #: " + row[0];
          MailApp.sendEmail(email, subject, message);
          Logger.log(`${subject}: ${message} sent to ${email}`);
        }
      });
    }

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Если вы хотите проверить, совпадает ли дата в одном столбце с другим, или даже если конкретная дата составляет 90 дней после / до другой даты, я рекомендую создать дополнительные столбцы (которые можно скрыть) для с этой целью. Зачем? Что ж, как только вы возьмете дату, вы (можете) фактически получить день раньше, см. Здесь для получения дополнительной информации , что является раздражающей проблемой.

Так что ваш for l oop будет тогда создайте такое условие:

// lets assume column 15 contains your date check logic

function ifItsBeen90Days(){
  const rows = SpreadsheetApp.getActive().getSheetByName("PAOS").getDataRange().getValues();
  rows.forEach( (row, index) => {
    const doesConditionApply = row[16]; // 15th col, is 16th index
    // skip if the value is not what you are looking for
    if( doesConditionApply != true ){
      return
    }        

    SendItIf90daysPast()
  });
}
0 голосов
/ 27 мая 2020
function ifItsBeen90Days() { 
  const ss=SpreadsheetApp.getActive();
  const shsr=3;
  const sh=ss.getSheetByName("PAOS");
  const rg=sh.getDataRange();
  const v=sh.getRange(shsr,11,sh.getlastr()-shsr+1,1).getValues();
  const dt=new Date();
  const today=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate());
  const t90v=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()-90).getTime();
  const t91v=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()-91).getTime();
  const tv=today.getTime();
  v.forEach(function(r,i){
    var d=new Date(r[0]);
    var dv=new Date(d.getFullYear(),d.getMonth(),d.getDate()).valueOf();
    var diff=dv-tv;
    if(diff>=t90v && diff<t91v){
      //it has been 90 days
    }
  });
}
...