1

在尝试从 Google 日历中提取一天议程作为使用 Google Apps 脚本管理的工作流程的一部分时,我getEventsForDay()从 CalendarApp 服务调用。

一个特定的(简化的)示例:

var calendarView = CalendarApp.getCalendarById(ScriptProperties.getProperty("calendarID"));
var today = new Date();
var todaysEvents = calendarView.getEventsForDay(today);

这将使用所有日期事件填充数组todaysEvents,但还包括重复事件之前和之后的重复事件,其中重复跨越查询中的日期,但不会在当天发生。(查询周三,周一、周二、周五的重复事件将被返回)

我们将日历运行到 GMT/BST,因此我研究了这是否是Date()将日期返回为 PDT 而不是 UTC 的函数,但有时会返回任一方向超过 24 小时的事件。

假设这不是错误,我无法找到从返回的数组中过滤掉这些“无效”事件的好方法。你可以吗?

或者这是一个错误?

谢谢

4

1 回答 1

3

乔纳森,

我们正在弄清楚。在内部,全天事件以 UTC 表示,因此这将延续到前一天或第二天,具体取决于您所在的时区。一周前有人问我一个问题,我提出了在我们解决这个问题时,以下解决方法:

var startOfDay = new Date();
startOfDay.setUTCHours(0);
startOfDay.setMinutes(0);
startOfDay.setSeconds(0);
startOfDay.setMilliseconds(0);  
var endOfDay = new Date(startOfDay.getTime() + 24 * 60 * 60 * 1000);

var events = CalendarApp.getDefaultCalendar().getEvents(startOfDay, endOfDay)

我意识到这不是目前最好的体验,但它应该可以满足您的需求。您可以将其抽象为一个函数。

于 2012-08-09T16:37:14.723 回答