Php 谷歌日历中的重复事件是如何工作的

Php 谷歌日历中的重复事件是如何工作的,php,google-api,google-calendar-api,recurring-events,Php,Google Api,Google Calendar Api,Recurring Events,我尝试实现两种方式同步应用程序与谷歌日历。我没有找到关于复发事件如何工作的合理描述。它们是否在主事件中物理上重复(具有自己的ID)?Google日历API(listEvents)只返回重复出现的主事件(字符串)。当复发没有自己的ID时,如何删除它们?当我从API(listEvents)中的数据中删除系列(在google日历中)中的一个重复事件时,并没有提到丢失的重复事件。重复事件是单个事件(实例)的系列。您可以通过以下链接阅读有关实例的信息: 如果要删除定期事件(所有实例),则需要使用以下代码:

我尝试实现两种方式同步应用程序与谷歌日历。我没有找到关于复发事件如何工作的合理描述。它们是否在主事件中物理上重复(具有自己的ID)?Google日历API(listEvents)只返回重复出现的主事件(字符串)。当复发没有自己的ID时,如何删除它们?当我从API(listEvents)中的数据中删除系列(在google日历中)中的一个重复事件时,并没有提到丢失的重复事件。

重复事件是单个事件(实例)的系列。您可以通过以下链接阅读有关实例的信息:

如果要删除定期事件(所有实例),则需要使用以下代码:

$rec_event = $this->calendar->events->get('primary', $google_event_id);
if ($rec_event && $rec_event->getStatus() != "cancelled") { 
    $this->calendar->events->delete('primary', $google_event_id); // $google_event_id is id of main event with recurrences
}
如果要从某个日期删除以下所有实例,则需要获取该日期之后的所有实例,然后在循环中删除它们:

    $opt_params = array('timeMin' => $isoDate); // date of DATE_RFC3339 format,  "Y-m-d\TH:i:sP"
    $instances = $this->calendar->events->instances($this->calendar_id, $google_event_id, $opt_params);

    if ($instances && count($instances->getItems())) {
      foreach ($instances->getItems() as $instance) {
        $this->calendar->events->delete('primary', $instance->getId());
      }
    }
如果要添加异常(仅删除重复事件的一个实例),则需要使用几乎相同的代码,但使用另一个筛选器:

    $opt_params = array('originalStart' => $isoDate); // exception date
    $instances = $this->calendar->events->instances($this->calendar_id, $google_event_id, $opt_params);

    if ($instances && count($instances->getItems())) {
      foreach ($instances->getItems() as $instance) {
        $this->calendar->events->delete('primary', $instance->getId());
      }
    }

这不是处理未来事件删除的方式,因为可能有无限多的事件(未指定结束日期/计数)。相反,应该更新当前重复事件设置新的结束日期(或各自的计数),并从同一日期开始创建新的重复事件。官方文件中提供了更多信息: