Google日历Gdata旧的定期事件已删除事件仍显示,其中EventID以Z结尾

时间:2012-02-23 11:12:56

标签: php zend-framework gdata recurring-events event-id

我曾试图谷歌这个问题,但没有运气,可能是由于搜索字符串“Z”不够具体。

背景
使用Google Calendar Zend gdata库,并使用简单的代码列出特定时间段内的事件。在这种情况下,2012年2月27日至2012年3月3日。 我列出了一些单项活动,其中一个重复活动,名为“Rob”,每周一次。周五 我使用基本代码没有任何花哨的添加。然而:))

问题:
当我使用$query->setSingleEvents(TRUE)参数时,一切都按预期工作,并显示正确的事件。

当我谈到'显示'事件时,我正在谈论使用Zend gdata显示日历事件的PHP页面。
在所有情况下,Google日历GUI都会显示正确的数据(即,“Rob”事件未显示,因为它已被删除。

但是当我将其设置为FALSE时,定期事件“Rob”应该具有要分组的开始时间,而是显示一些额外的随机事件而没有starttime ,只是相同的标题。即使我已经删除了重复发生的事件,它仍会显示在gdata返回的数据中。

有趣的观察
已删除但仍显示在页面上的事件的EventID以“Z”结尾。 它具有通常的eventID,后跟:_20120302T030000Z

我的问题
此事件已在Google日历GUI中删除。为什么gdata仍然显示一个被删除的事件,以及以时间戳和Z结尾的eventid是什么意思。

决议尝试:
1.试图将其从经常性事件更改为正常事件(删除“系列中所有事件的重复”) 没有运气,还有额外的运气。
2.完全删除系列中所有事件的重复事件 这再次显示SingleEvents(TRUE)中的正确结果,但在FALSE中,旧的'Rob'事件仍会显示,当它已完全从日历中删除时。

代码:

function outputCalendarByDateRange($client, $startDate='2012-02-27',
                                   $endDate='2012-03-03')
{
  $gdataCal = new Zend_Gdata_Calendar($client);
  $query = $gdataCal->newEventQuery();
  $query->setUser('default');
  $query->setVisibility('private');
  $query->setProjection('full');
  $query->setOrderby('starttime');
  $query->setStartMin($startDate);
  $query->setStartMax($endDate);
  $query->setSingleEvents(FALSE);
  $eventFeed = $gdataCal->getCalendarEventFeed($query);

  foreach ($eventFeed as $event) {
    echo "Title: " . $event->title->text . "<br />";
    echo "Event ID: " . $event->id->text . "<br />";
    foreach ($event->when as $when) {
      echo "Start: " . $when->startTime . "<br />";
    }
    echo "<br />";
  }
}

1 个答案:

答案 0 :(得分:2)

以下是我在docs中找到的内容:

  

36.5.6。 删除活动 可以通过调用日历服务的delete()方法并提供编辑来删除日历事件   事件的URL或通过调用现有事件自己的delete()方法。

     

在任何一种情况下,已删除的事件仍会显示在用户的上方   如果提供了updateMin查询参数,则为私有事件提要。   删除的事件可以与常规事件区分开来,因为它们   将 eventStatus属性设置为   的 “http://schemas.google.com/g/2005#event.canceled”

在您解析Feed时,您似乎必须测试事件状态。

BTW时间戳分解为

  

年:2012年:03月:02时间:T小时:分钟:秒03:00:00 zulu:Z

Zulu 与GMT(格林威治标准时间)或UTC(通用时间码)相同