Кажется, что в моем утверждении 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)
}