Google Calendar API查询全天活动

时间:2014-07-26 14:51:15

标签: date datetime google-api google-calendar-api google-api-js-client

我有一个应用程序,它使用Calendar 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

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

如果我删除了对setUTCHours(0)timeMin参数的timeMax的来电,那么我遇到了相反的问题,我得到了7/21到7/26并错过了7上的事件/ 20。如何在任何时区可靠地获得本周的所有全天活动?

3 个答案:

答案 0 :(得分:4)

我自己也遇到过这个问题。对于过滤,结束时间为独占,而开始时间为包含。见the events spec here。大概当你只是指定一个日期而不是一个时间时,它会把它当作00:00:00 UTC - 那么不包括那天。但这只是我的猜测。无论如何,如果你在结束日期+1,它应该按照你期望的方式工作。

答案 1 :(得分:2)

我会在本周的两边要求+1天,然后过滤掉那些不感兴趣的事件。

答案 2 :(得分:1)

问题在于我是如何创建活动的。要创建日期1的全天活动,您应将start设置为x,将end设置为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) {
      // ...
    }
  });
相关问题