我已经在网上搜索了,我已经查看了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,
取值
答案 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