2015-12-29 31 views
1

我在网上搜索,我已经看了Calendar类API的参考,在这里找到: https://developers.google.com/apps-script/reference/calendar/calendarCalendar.getEvents()返回数组为了

我从运行我已经创建了一个元素的脚本通知由getEvents(startTime,endTime)返回的CalendarEvent[]似乎按照时间顺序排列。这总是如此吗?

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

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

将永远为0 <= i < (events.length - 1)是真的吗?

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

TIA的任何援助,

小号

+0

我已经决定对谷歌 - 应用问题跟踪器创建一个问题。实质上,我要求明确说明文档。 – SJL

回答

1

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

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

或使用香草JavaScript来对它们进行排序进行排序。

+0

感谢您的答案。这对我来说似乎是API参考的懒惰文档。它应该明确提到返回数组的顺序(如果有的话)。 – SJL

0

我对这个问题的看法是否定的,该阵列不保证其将被勒令

如果时间范围内启动的事件将被退回,该时间范围内结束,或涵盖的时间范围。如果未指定时区,则时间值将在脚本时区的上下文中解释,该时区可能与日历的时区不同。

如果数据不完整,可能会妨碍您处理它。它仍然是你最好的实施一种

+0

是的,我读到了API参考,但注意到非常特殊的结果。谢谢。 – SJL

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