3

我有一个应用程序,它使用日历 v3 API 在 Google 日历上创建、查询和修改全天事件。当我创建这些事件时,它们看起来像这样:

{ 
  summary: 'My Event",
  start: { date: '2014-07-26' },
  end: { date: '2014-07-26' } 
}

因此,如果我想查询 7 月 20 日至 7 月 26 日之间的所有此类事件,我会发送如下查询:

GET www.googleapis.com/calendar/v3/{calendarID}/events?timeMin=2014-07-20T00%3A00%3A00.000Z&timeMax=2014-07-26T00%3A00%3A00.000Z

在更易读的格式中,参数是:

timeMin:2014-07-20T00:00:00.000Z
timeMax:2014-07-26T00:00:00.000Z

但是,这排除了所有带有 date 的事件2014-07-26,它只获取 20 日到 25 日的事件。在我的参数中你可以看到我使用setUTCHours(0)了为了没有时区信息。

如果我删除对和参数的调用,setUTCHours(0)那么timeMintimeMax会遇到相反的问题,我从 7 月 21 日到 7 月 26 日,错过了 7 月 20 日的事件。如何在任何时区可靠地获取一周的所有全天事件?

4

3 回答 3

4

我自己也遇到过这个。对于过滤,结束时间是排除的,而开始时间是包含的。请参阅此处的事件规范。据推测,当您只指定日期而不是时间时,它会将其视为 00:00:00 UTC - 所以不包括那一天。但这只是我的猜测。无论如何,如果您对结束日期 +1,它应该按照您期望的方式工作。

于 2014-08-05T23:13:42.203 回答
2

我会在一周的两边都要求 +1 天,并对不感兴趣的事件进行后过滤。

于 2014-08-04T10:11:02.663 回答
1

问题在于我如何创建事件。要在 date 创建全天事件1,您应该设置starttoxendto x + 1 day

  var dateStringStart = dateToString(dateObj);
  var dateObjEnd = new Date(dateObj.getTime() + (24 * 60 * 60 * 1000));
  var dateStringEnd = dateToString(dateObjEnd);

  gapi.client.request({
    path: '/calendar/v3/calendars/' + id + '/events',
    method: 'POST',
    body: {
      summary: name,
      start: {
        date: dateStringStart
      },
      end: {
        date: dateStringEnd
      }
    },
    callback: function(eventObj) {
      // ...
    }
  });
于 2014-08-08T17:34:35.023 回答