【问题标题】:Calendar.getEvents() returned array orderCalendar.getEvents() 返回数组顺序
【发布时间】:2015-12-29 00:22:23
【问题描述】:

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

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

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

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

0 &lt;= i &lt; (events.length - 1) 总是如此?

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

TIA 寻求任何帮助,

S

【问题讨论】:

  • 我决定在 google-apps 问题跟踪器上创建一个问题。本质上,我要求文档是明确的。

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


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答。在我看来,这似乎是 API 参考的懒惰文档。它应该明确提到返回数组的顺序(如果有的话)。
【解决方案2】:

我对此的看法是否定的,数组不保证它会被订购

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

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

【讨论】:

  • 是的,我在 API 参考中读到了这一点,但注意到了非常特殊的结果。谢谢。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多