Я пытаюсь сделать макрос, который распознает дату пятницы и добавляет к этой дате 3 дня, чтобы пропустить выходные и получить дату следующего понедельника. У меня есть функция электронной таблицы, которая добавляет новый блок на каждый день, обновляя его до сегодняшней даты. Тем не менее, он не учитывает выходные, поэтому было бы здорово их пропустить.
Извиняюсь за ужасный код новичка js.
var date = new Date('July 26, 2019 13:00:00 -0500');
function skipWeekend(date){
while (date.getDate() <= 5 && date.getDate() >0){
console.info("The day is...",date);
date+=1;
} console.info("The day is...",date.getDate()+3);
return (date)
}
skipWeekend(date);
The day is... 24
В идеале нужно: дата «29 июля 2019 г., 13:00:00 -05:00».
Спасибо за вашу помощь
Зачем узнавать дату пятницы? Это не выходные, и прибавляя к ним два, получается... Воскресенье? Выходные? Конечно, вы хотели бы признать субботу, а затем добавить два дня или воскресенье и добавить один?
'July 22, 2019 13:00:00 -0500'... Понедельник? Карты в 'July 29, 2019 13:00:00 -0500'? Это была целая неделя, и это была даже не пятница. Я изо всех сил пытаюсь понять смысл вашего вопроса.
Извините, моя логика - мусор. Я обновил код, чтобы отразить 3 дня, необходимые для того, чтобы пятница стала понедельником.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Таким образом, вы можете сделать немного логики, чтобы определить следующий будний день. Вот пример того, как этого добиться
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
function getNextWeekday(date){
//If the day is sunday through Thursday, add 1 day
if (date.getDay() >= 0 && date.getDay() < 5){
return date.addDays(1);
} else {
//Otherwise, determine how many days to add
return date.addDays(8 - date.getDay());
}
}
var date = new Date('July 25, 2019 13:00:00 -0500');
document.write(date + ' -> ' + getNextWeekday(date) + '<br>');
date = new Date('July 26, 2019 13:00:00 -0500');
document.write(date + ' -> ' + getNextWeekday(date));Если я правильно понимаю, вам нужна функция nextWorkingDay. Если так, то это было бы лучшим названием для него.
Одна проблема в вашем коде заключается в том, что вы используете метод getDate, как если бы это была функция getDay, но первая дает день месяца (отсчитывается от 1), вторая — день недели (отсчитывается от нуля).
Вы можете просто создать простую строку поиска. Следующее генерирует следующие 30 рабочих дней:
function nextWorkingDay(date) {
date.setDate(date.getDate() + +"1111132"[date.getDay()]);
}
var date = new Date('July 26, 2019 13:00:00');
for (let i = 0; i < 30; i++) {
nextWorkingDay(date);
console.info(date.toString());
}У него очень тривиальное решение, надеюсь, это поможет:
var date = new Date('July 27, 2019 13:00:00 -0500');
switch (date.getDay()){
case 5:
date = date.setDate(date.getDate() + 3);
break;
case 6:
date = date.setDate(date.getDate() + 2);
break;
case 7:
date = date.setDate(date.getDate() + 1);
break;
default:
break
}
var nextWorkingDate = new Date(date)
В коде, который вы разместили, нет
getDate. Вы также использовалиandвместо&&и пропустили скобки. Создайте минимальный воспроизводимый пример с исполняемый фрагмент стека