Calendar.getEvents() 返回的数组顺序

Calendar.getEvents() returned array order

我在网上搜索并查看了 Class 日历 API 参考,可在此处找到: https://developers.google.com/apps-script/reference/calendar/calendar

我从 运行 我创建的脚本中注意到 getEvents(startTime,endTime) 返回的 CalendarEvent[] 的元素似乎是按时间顺序排列的。这总是正确的吗?

本质上,我保证下面的代码

events[i].getStartTime().getTime() <= events[i+1].getStartTime().getTime()

对于 0 <= i < (events.length - 1) 总是正确的?

我对此很感兴趣,因为我正在创建一个脚本,它将两个(或更多)不同的日历合并为一个,并且 returns 所有未分配的时间段(即没有安排事件)或重叠多个事件。知道 CalendarEvent[] 中的元素是按时间顺序排列的,这使得这项任务变得更加容易(并且计算成本更低)。

TIA 需要任何帮助,

S

根据我的经验,是的。总是按照这个顺序。 虽然我检查了文档,但他们没有提及任何相关内容。

为了安全起见,您可以使用高级服务按日期排序 https://developers.google.com/google-apps/calendar/v3/reference/events/list

或使用原版 javascript 对它们进行排序。

我的看法是不,数组不能保证它会被排序

An event will be returned if it starts during the time range, ends during the time range, or encompasses the time range. If no time zone is specified, the time values are interpreted in the context of the script's time zone, which may be different from the calendar's time zone.

如果数据不完整,可能会妨碍您处理它。还是最好实现一个排序

我也遇到了这个问题。我没有使用矫枉过正的日历高级服务,而是为 CalendarEvent 个对象的数组编写了一个简单的排序器。

// copy this to the bottom of your script, then call it on your array of CalendarEvent objects that you got from the CalendarApp
//
// ex:
// var sortedEvents = sortArrayOfCalendarEventsChronologically(events);
// or
// events = sortArrayOfCalendarEventsChronologically(events);

function sortArrayOfCalendarEventsChronologically(array) {
  if (!array || array.length == 0) {
    return 0;
  }
  var temp = [];
  for (var i in array) {
    var startTime = new Date(array[i].getStartTime());
    var startTimeMilli = startTime.getTime();
    for (var j in temp) {
      var iteratorStartTime = temp[j].getStartTime();
      var iteratorStartTimeMilli = iteratorStartTime.getTime();
      if (startTimeMilli < iteratorStartTimeMilli) {
        break;
      }
    }
    temp.splice(j, 0, array[i]);
  }
  return temp;
}

https://gist.github.com/xd1936/0d2b2222c068e4cbbbfc3a84edf8f696