Поиск свободных слотов по нескольким календарям - PullRequest
0 голосов
/ 15 января 2019

Я пишу скрипт, который при заданных параметрах времени начала / конца найдет первый взаимно доступный временной интервал в двух разных календарях, чтобы забронировать собрание.

Сценарий, который у меня есть, работает очень медленно. Я предполагаю, что это потому, что я перебираю оба календаря с шагом 30 минут и запускаю CalendarApp.getCalendarById (email) .getEvents каждый раз, чтобы посмотреть, есть ли бесплатный 30-минутный интервал времени.

Я думал о запуске пакетной операции с использованием .getEvents () один раз, чтобы минимизировать количество операций чтения, но я застрял здесь, потому что в результате получается массив с занятыми временными интервалами, тогда как я пытаюсь найти свободные временные интервалы.

Есть ли лучший способ сделать так, чтобы мой скрипт работал быстрее?

1 Ответ

0 голосов
/ 15 января 2019

Найти открытые слоты времени

Я недавно сделал что-то похожее на это, и я сделал, чтобы создать объект подобный этому:

var timeSlotsObj={"8:00-8:30":0,"8:30-9:00":0,"9:00-9:30":0,"9:30-10:00":0,...."7:30-8:00":0,slotA["8:00-8:30","8:30-9:00",...]}

Затем я просмотрел каждый календарь и увеличил значение временного интервала для каждого события в определенный день , который перекрывал этот временной интервал в каждом календаре. После этого я взял массив slotsA и прошел по нему в поисках любого временного интервала, в котором все еще было 0.

Цикл выглядит следующим образом:

for(var i=0;i<timeSlotObj.slotA.length;i++){
  if(timeSlotsObj[timeSlotsObj.slotA[i]]==0){
    //You just found an empty time slot and it's value is timeSlotsObj.slotA[i]
  }

Любое свойство объекта, значение которого по-прежнему равно 0, является открытым временным интервалом для данного набора календарей в любой день.

В моем случае я фактически использовал объекты Date в качестве свойств объекта или ключей, но идея та же. Независимо от того, в каких слотах нет событий, это свободные слоты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...