5

我试过用谷歌搜索这个问题,但没有运气,可能是因为搜索字符串“Z”不够具体。

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

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

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

但是当我将其设置为 时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 />";
  }
}
4

1 回答 1

2

这是我在文档中找到的:

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

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

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

顺便说一句,时间戳分解为

年:2012 日:03 月:02 时间:T 时:分:秒 03:00:00 祖鲁语:Z

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

于 2012-03-24T10:57:24.280 回答