Создать календарь событий из данных электронной таблицы для нескольких часовых поясов - PullRequest
0 голосов
/ 15 марта 2019

Я создал базовую таблицу Google, где сотрудники будут регистрировать встречи, а затем смогут экспортировать их в календарь Google.

Проблема заключается в том, что у меня есть сотрудники, работающие в США и в разных часовых поясах.Я попытался изменить настройки электронной таблицы, но часовые пояса в Google кажутся немного ненадежными (тихоокеанское время отображается как GMT-8, когда оно в настоящее время равно -7) ...

Я попытался жестко кодировать разницу во времени следующим образом:

var tstart = new Date(tstart1.getTime()  + 420 * 60000)

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

Как я могу остановить возникновение этой ошибки?

Остальная часть кода:

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 = sheet.getRange("H2:H2").getValue();
  var calId = "********";
  var cal = CalendarApp.getCalendarById(calId);

  for (i=0; i<data.length; i++) {
    if (i < headerRows) continue; // Skip header row(s)
    var row = data[i];
    var date = new Date(row[1]);  // First column
    var title = row[2];           // Second column
    var initial = row[0];
    var city = row[3];
    var concatTitle = initial + " - " + title + ", " + city;
    var tstart1 = new Date(row[4]);
    var tstart = new Date(tstart1.getTime()  + 420 * 60000)
    tstart.setDate(date.getDate());
    tstart.setMonth(date.getMonth());
    tstart.setYear(date.getYear());
    //var tstop = new Date(row[4]);
    var tstop = new Date(tstart.getTime() + row[5] * 60000);
    // Logger.log(new Date(tstart.getTime() + 65 * 60000))
    // var tstop = new Date(tstart + row[4]);
    tstop.setDate(date.getDate());
    tstop.setMonth(date.getMonth());
    tstop.setYear(date.getYear());
    var loc = row[6];
    var desc = row[7];
    var id = row[8];              // Sixth column == eventId
    // Check if event already exists, update it if it does
    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {
      // do nothing - we just want to avoid the exception when event doesn't exist
    }
    if (!event) {
      //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
      var newEvent = cal.createEvent(concatTitle, tstart, tstop, {description:desc,location:loc}).getId();
      row[8] = newEvent;  // Update the data array with event ID
    }
    else {
      event.setTitle(concatTitle);
      event.setDescription(desc);
      event.setLocation(loc);
      // event.setTime(tstart, tstop); // cannot setTime on eventSeries.
      // ... but we CAN set recurrence!
      var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
      event.setRecurrence(recurrence, tstart, tstop);
    }
    debugger;
  }
  // Record all event IDs to spreadsheet
  range.setValues(data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...