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

时间:2015-12-29 00:22:24

标签: google-apps-script google-calendar-api

我已经在网上搜索了,我已经查看了Class Calendar API参考资料,可在此处找到: https://developers.google.com/apps-script/reference/calendar/calendar

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

基本上,我保证以下代码

events[i].getStartTime().getTime() <= events[i+1].getStartTime().getTime()
对于0 <= i < (events.length - 1)

总是如此?

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

任何协助的TIA,

取值

3 个答案:

答案 0 :(得分:1)

根据我的经验,是的。它始终按此顺序排列。 虽然我检查了文档,但他们没有提及任何相关内容。

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

进行排序

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

答案 1 :(得分:0)

我对此的看法是否定的,阵列并不能保证它会被订购

  

如果事件在时间范围内开始,在时间范围内结束或包含时间范围,则将返回事件。如果未指定时区,则在脚本的时区上下文中解释时间值,该时区可能与日历的时区不同。

如果数据未完成,则可能会妨碍您处理数据。它仍然是你实现排序

的最佳选择

答案 2 :(得分:0)

我也有这个问题。我没有使用过度的日历高级服务,而是为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