Кажется, что в моем утверждении Javascript IF два одинаковых значения из листа Google не совпадают

Я пытаюсь написать скрипт, в котором даты в столбце сравниваются с сегодняшней датой, и если даты в столбце совпадают, отправляется электронное письмо.

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rotDate = sheet.getRange("F6").getValue();
  var today = sheet.getRange("F1").getValue();
  //var today = new Date().toLocaleDateString();  // Today's date, without time
  var dumpCell = sheet.getRange("J3");
  var dumpCell2 = sheet.getRange("J4");
  var dumpCell3 = sheet.getRange("J5");
  if(rotDate==today) {
    //dumpCell is there to dump a value in a cell if the IF statement is true
    dumpCell.setValue(rotDate);
    MailApp.sendEmail("this is where my email would go", "subject", "body");
    }
  //these dump the compared vars into cells so they can be checked against one another manually
  dumpCell2.setValue(rotDate)
  dumpCell3.setValue(today)
}

Это насколько я получил. Значения в F6 и F1 идентичны, я их набрал, перепечатал, скопировал, вставил и т. Д. Но по какой-то причине мое утверждение if просто не запустится. Он ведет себя так, как будто эти два значения различны, и я не могу понять, почему.

Если я изменю var rotDate а также var today к соответствующим строкам, например "123" тогда, кажется, работает как ожидалось.

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

Это скриншот моей тестовой таблицы данных. Там есть другие столбцы с другими данными, которые должны были использоваться для дальнейшего тестирования, но я не зашел так далеко.

Кто-нибудь знает, что я могу делать не так?

1 ответ

Решение

Попробовав различные подходы, я взломал его, используя фрагмент кода из ответа Джона Линя: Сравнение двух дат Сценарий приложений Google

Понимая, что ошибка была в том, что я пытался сравнить две даты (либо дату в соседней ячейке, либо дату, сгенерированную процедурным способом при каждом запуске функции), я понял, что мне нужно лучше отформатировать данные, которые я собирался сравнить. Это мой исправленный код, который теперь работает как положено:

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rotDate = sheet.getRange("F6").getValues();
  var today = new Date();
  //sample values
  var sYyyy = Utilities.formatDate(new Date(rotDate), "GMT+8","yyyy");
  var sMm = Utilities.formatDate(new Date(rotDate), "GMT+8","MM");
  var sDd = Utilities.formatDate(new Date(rotDate), "GMT+8","dd");
  //Test Values
  var tYyyy = Utilities.formatDate(new Date(today), "GMT+8","yyyy");
  var tMm = Utilities.formatDate(new Date(today), "GMT+8","MM");
  var tDd = Utilities.formatDate(new Date(today), "GMT+8","dd");  
  //var rotDate = sheet.getRange("F6").getValue();
  //var today = sheet.getRange("F1").getValue();
  //var today = new Date().toLocaleDateString();  // Today's date, without time
  var dumpCell = sheet.getRange("J3");
  var dumpCell2 = sheet.getRange("J4");
  var dumpCell3 = sheet.getRange("J5");
  if (sYyyy + sMm + sDd == tYyyy + tMm + tDd) {
  //if(rotDate===today) {
    //dumpCell is there to dump a value in a cell if the IF statement is true
    dumpCell.setValue(rotDate);
    MailApp.sendEmail("tv18766@gmail.com", "subject", "body");
    }
  //these dump the compared vars into cells so they can be checked against one another manually
  dumpCell2.setValue(rotDate)
  dumpCell3.setValue(today)
}
Другие вопросы по тегам