我有一个应用程序,它使用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。如何在任何时区可靠地获得本周的所有全天活动?
答案 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) {
// ...
}
});