FiestaEmpeiza
y FiestaAcaba
всегда будет последней строкой, потому что вы перебираете значения даты и присваиваете, но затем не выполняете никаких ваших условных проверок.Вам необходимо объединить циклы в один, а затем переместить операторы if в цикл.
Я рекомендую изменить некоторые имена переменных, чтобы они были более описательными, и передать время запуска вашей функции, чтобы вам было проще ее проверить.
Кроме того, убедитесь, что вы поддерживаете согласованность сВаши проверки даты - объекты даты включают время.То, как вы это написали, вы сравнивали объекты дат, то есть «1 апреля @ 4 вечера» раньше, чем «1 апреля @ 4:01 вечера».Таким образом, ваше условие может не выполниться в зависимости от значения, которое вы определили в date
.Это можно исправить просто настройкой часов .(Будьте осторожны с проблемами часовых поясов.)
function test_shouldRunTrigger() {
var triggerTime = new Date("Fri Apr 19 17:00:00 GMT+08:00 2019"); // Change the date to test
Logger.log(shouldRunTrigger(triggerTime));
}
function shouldRunTrigger(triggerTime) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("x");
var fiestas = sheet.getRange(2,1,sheet.getLastRow()-1,4).getValues();
var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var triggerDay = days[triggerTime.getDay()]; // Day of the week
var triggerHour = triggerTime.getHours(); // Hour of the trigger
var triggerDate = new Date(triggerTime.setHours(0, 0, 0, 0)); // Set time to 00:00:00
Logger.log(fiestas)
for (var row in fiestas) {
var fiestaEmpieza = new Date(fiestas[row][2].setHours(0, 0, 0, 0)); // Set time to 00:00:00
var fiestaAcaba = new Date(fiestas[row][3].setHours(0, 0, 0, 0)); // Set time to 00:00:00
// Don't run from Friday 6pm until Saturday 10pm
if ((triggerDay === "Fri" && triggerHour >= 18) || (triggerDay === "Sat" && triggerHour <= 21)) {
return false;
} else if ( // Dont run from specific dates from Tab "x" from 6pm until 10pm
triggerDate >= fiestaEmpieza && // Compares dates and we know the times are all 00:00:00
triggerHour >= 18 &&
triggerDate <= fiestaAcaba && // Compares dates and we know the times are all 00:00:00
triggerHour <= 21
) {
return false;
} else {
return true;
}
}
}