AppScript/Javascript — добавьте 2 дня к дате пятницы, чтобы пропустить выходные

Я пытаюсь сделать макрос, который распознает дату пятницы и добавляет к этой дате 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».

Спасибо за вашу помощь

В коде, который вы разместили, нет getDate. Вы также использовали and вместо && и пропустили скобки. Создайте минимальный воспроизводимый пример с исполняемый фрагмент стека

adiga 22.07.2019 15:58

Зачем узнавать дату пятницы? Это не выходные, и прибавляя к ним два, получается... Воскресенье? Выходные? Конечно, вы хотели бы признать субботу, а затем добавить два дня или воскресенье и добавить один?

spender 22.07.2019 16:09
'July 22, 2019 13:00:00 -0500'... Понедельник? Карты в 'July 29, 2019 13:00:00 -0500'? Это была целая неделя, и это была даже не пятница. Я изо всех сил пытаюсь понять смысл вашего вопроса.
spender 22.07.2019 16:12

Извините, моя логика - мусор. Я обновил код, чтобы отразить 3 дня, необходимые для того, чтобы пятница стала понедельником.

skiventist 22.07.2019 16:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
114
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Таким образом, вы можете сделать немного логики, чтобы определить следующий будний день. Вот пример того, как этого добиться

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)

Другие вопросы по теме