4

カレンダーのイベントを日付範囲で取得しようとしています(単一または定期的なイベントも同様)。これで、定期的なイベントの次のインスタンスの正確な日時が必ずしもわかりません。定期的なイベントの場合、以下のリクエストで取得している最初のインスタンスの日付ではなく、次の発生の日付が必要です。どうすればよいですか?

https://www.googleapis.com/calendar/v3/calendars/ {calendarid} / events?fields = items(id、summary、start)&key = {APIkey}&timeMax = {enddate}&timeMin = {startdate}

4

3 に答える 3

10

URL パラメータを追加しますsingleEvents=True。これにより、すべての定期的なイベントが個々のアイテムに展開されます。一連のイベントの 2 番目のイベントがいつなのかまだわからない場合、具体的に取得する方法はありませんが、そのパラメーターを使用すると、すべてのインスタンスを解析して、必要なインスタンスを取得できます。

ソース: https://developers.google.com/google-apps/calendar/v3/reference/events/list

于 2013-01-25T19:37:25.083 に答える
0

それを行う直接的な方法がありますが、それを達成する方法を一緒にハックすることができます。

アイデアは、時間境界を指定してレコード数を制限できるということであり、それで十分です。

そのため、timeMin から 1 年、= 1 のように、timeMin現在 (または参照イベントの終了日の直後) に十分な数を設定すると、次のインスタンスが存在する場合はそれが取得されます。timeMaxmaxResults

nodejs でこれを行う方法は次のとおりです。

    let startDate = startTime ? new Date(startTime) : new Date()
    let endDate = endTime ? new Date(endTime) : new Date(startDate.getTime() + 12 * 31 * 24 * 60 * 60 * 1000) // 1 year ahead
    let startDateISO = startDate.toISOString()
    let endDateISO = endDate.toISOString()

    let result = await  calendar.events.instances({
        calendarId: "primary",
        eventId: masterEventId,
        maxResults: 1,
        timeMin: startDateISO,
        timeMax: endDateISO,
        orderBy: "startTime",
        timeZone: "UTC"
    })
    let nextInstance = result.data.items[0]

同様に、結果を降順に並べ替え、時間境界を逆にすると、以前のインスタンスを取得できます (参照イベントの開始前のtimeMin1 年前に設定)。timeMax

于 2020-05-18T13:01:29.357 に答える