查询全天事件的Google Calendar API



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

{ 
  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)是为了没有时区信息。

如果我为timeMintimeMax参数删除对setUTCHours(0)的调用,那么我就会遇到相反的问题,我得到7/21到7/26,并错过7/20的事件。我怎样才能可靠地获得一周中任何时区的所有全天事件?

这是我自己遇到的。结束时间为不包含,开始时间为包含。请参阅此处的事件规范。大概当您只指定日期而不指定时间时,它会将其视为UTC 00:00:00这样的东西——因此不包括当天。但这只是我的猜测。无论如何,如果你在结束日期前加1,它应该按照你期望的方式工作。

我会要求一周中两边都加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) {
      // ...
    }
  });

相关内容

  • 没有找到相关文章

最新更新