Вы должны добавить опцию orderBy
, в противном случае возвращается событие, которое имеет время начала после или timeMin
, но было самым старым для редактирования .Поэтому код должен быть:
var calendarId = 'a_valid_calendar_ID';
var eventTime = '2019-03-05T07:00:00.000Z';
var optionalArgs = {'singleEvents': true, 'timeMin': eventTime, 'maxResults': 1, 'orderBy': 'startTime'};
var results = Calendar.Events.list(calendarId, optionalArgs);
Logger.log(JSON.stringify(results, null, 4))
Я понял это, когда заметил, что возвращенный JSON имеет поле nextPageToken
, несмотря на тот факт, что мне нужен только один результат - 'maxResults': 1
* 1013Причина того, что я получал разные результаты каждый раз, когда запускал свой собственный код, заключалась в том, что я использовал
id
события, чтобы изменить это событие.Если бы я затем выполнил тот же код с точно такими же аргументами, отредактированное событие больше не было самым старым, которое было отредактировано с помощью startTime после
timeMin
, и поэтому мне давали следующее событие после этого!
Поведение этого API несколько нелогично и может быть улучшено с помощью:
- заставить поведение по умолчанию использовать необязательные аргументы
{'singleEvents': true, 'orderBy': 'startTime'}
- изменить имя
maxResults
опция maxResultsPerPage
, чтобы сделать явным то, что max
относится к
. Тем временем документы должны быть отредактированы, чтобы привлечь внимание к этому несколько непредсказуемому поведению.