【问题标题】:Google Calendar API querying all-day eventsGoogle Calendar API 查询全天事件
【发布时间】:2014-09-18 06:47:12
【问题描述】:

我有一个应用程序,它使用 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)timeMintimeMax 参数的调用,那么我会遇到相反的问题,我会从 7/21 到 7/26 并错过 7/20 的事件。如何可靠地获取任何时区一周的所有全天事件?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我会在一周的两边都要求 +1 天,并对不感兴趣的事件进行后过滤。

      【讨论】:

      • 我同意这可行,但我正在寻找有关 API 为何以这种方式工作而不是解决方法的答案。
      【解决方案3】:

      问题在于我是如何创建事件的。要在日期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) {
            // ...
          }
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-07
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        相关资源
        最近更新 更多