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結束日期,它應該按照你期望的方式工作。