3

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

{ 
    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的事件。我如何可靠地在任何时区获得本周所有的全天活动?

回答

1

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

我会在一周的两面要求+1天,并过滤不感兴趣的事件。

+0

我同意这样做,但是我正在寻找一个关于为什么API这样工作而不是解决方法的答案。 –

4

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