Создавайте повторяющиеся мероприятия Календаря Google из Google Таблиц только по рабочим дням

Следующий ниже код отлично работает. Однако теперь мне нужно, чтобы повторяющиеся события появлялись только в будние дни (пн-пт). Если, например, я назначу повторяющуюся встречу на 2 сентября 2014 г., будущие встречи в конечном итоге будут приходиться на выходные. Как эти повторяющиеся встречи могут появляться только в будние дни? Например, если собрание выпадает на субботу, перенесите его на предыдущий день (пятницу). С другой стороны, если собрание приходится на воскресенье, перенесите его на следующий день (понедельник). Это возможно?

Я пробовал использовать функцию CalendarApp.Weekday.MONDAY и т. Д., Но в итоге она пишет поверх функции .addMonthlyRule () из кода ...

    //    Date | Title | Start Time | End Time | Location | Description | Recurring (months) | EventID
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Export Events",
    functionName : "exportEvents"
  }];
  sheet.addMenu("Calendar Actions", entries);
};

/*** Export events from spreadsheet to calendar */
function exportEvents() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var headerRows = 1;  // Number of rows of header info (to skip)
  var range = sheet.getDataRange();
  var data = range.getValues();
  var calId = "airliquide.com_ro3r20vk2rhm506fr2toq4vh5c@group.calendar.google.com";
  var cal = CalendarApp.getCalendarById(calId);
  for (i in data) {
    if (i < headerRows) continue; // Skip header row(s)
    var row = data[i];
    var date = new Date(row[0]);  // First column
    var title = row[1];           // Second column
    var tstart = setTimeToDate(date,row[2]);
    var tstop = setTimeToDate(date,row[3]);
    Logger.log('date = '+date+'tstart = '+tstart+'  tstop = '+tstop);
    var loc = row[4];
    var desc = row[5];
    var times = row[6]
    var id = row[7]; 
    // Check if event already exists, update it if it does
    try {
      var event = cal.getEventSeriesById(id);
      event.setTitle('got you');// this is to "force error" if the event does not exist, il will never show for real ;-)
    }catch(e){
      var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}); // create a "normal" event
      row[7] = newEvent.getId();  // Update the data array with event ID
      Logger.log('event created');// while debugging
      var event = cal.getEventSeriesById(row[7]);// make it an event Serie
    }
    event.setTitle(title);
    event.setDescription(desc);
    event.setLocation(loc);
      var recurrence = CalendarApp.newRecurrence().addMonthlyRule().interval(times)
      //.onlyOnWeekdays(
      //[CalendarApp.Weekday.MONDAY, CalendarApp.Weekday.TUESDAY, CalendarApp.Weekday.WEDNESDAY, CalendarApp.Weekday.THURSDAY, CalendarApp.Weekday.FRIDAY]);
      event.setRecurrence(recurrence, tstart, tstop);// we need to keep start and stop otherwise it becomes an AllDayEvent if only start is used
      }
  range.setValues(data);
}

function setTimeToDate(date,time){
  var t = new Date(time);
  var hour = t.getHours();
  var min = t.getMinutes();
  var sec = t.getSeconds();
  var dateMod = new Date(date.setHours(hour,min,sec,0))
  return dateMod;
  }

person Arsene de Conde    schedule 28.08.2014    source источник


Ответы (1)


Вы можете получить день недели, используя следующее:

var d = new Date();
var n = d.getDay();

Воскресенье - 0, понедельник - 1 и т. Д.

person AshClarke    schedule 28.08.2014
comment
Я понимаю, но как это можно использовать, чтобы повторяющиеся события появлялись только в будние дни? - person Arsene de Conde; 29.08.2014
comment
@Arsene de Conde - это будет невозможно с использованием вашей логики или, по крайней мере, очень сложно, поскольку каждое событие следует проверять по дню недели и изменять для этого конкретного события (что, я думаю, невозможно со сценарием) ... Я ' Я предлагаю вам создать отдельные события из электронной таблицы, в которой можно было бы точно контролировать даты в зависимости от дня и даты (потому что есть также праздники, которые нужно проверить!). Видя другие ваши недавние посты, я думаю, это то, что вы делаете, верно? - person Serge insas; 11.09.2014
comment
Да, это так. Спасибо, Серж! В этом есть смысл. - person Arsene de Conde; 11.09.2014