首页 > 解决方案 > 在 Apps 脚本中获取日历事件日期时出现类型错误:“尝试“getStartTime()”时出现类型错误”

问题描述

我正在编写一个脚本来修改选择的 Google 日历事件,方法是将它们的开始和结束日期/时间设置为今天。但是,每次尝试获取日历事件的日期或时间时,我都会因为类型错误而卡住 - 例如使用“ event.getTime() ”,这会导致“ TypeError: Cannot find function getStartTime in object "(参见我的示例代码的第 19 行)。

我已启用日历 API 和 Google Apps API,并已授权脚本修改我的日历。

我选择和检索相关日历事件的代码工作正常。然而,基于错误文本,我显然没有将事件作为对象,我无法确定我需要更正的内容。我花了 2-3 天的大部分时间来搜索 Stack Overflow(例如这篇文章和这篇文章)、Apps 脚本文档、API 参考以及许多其他相关资源以获取解决方案或示例,并尝试所有“get”的变体我能找到,但无济于事。

我对 Apps Script 完全陌生,因此我们将不胜感激任何帮助。

function FloatEvents() {
    var calName = "AAAAAAA"; //The name of the calendar to modify
    var calID = CalendarApp.getCalendarsByName(calName)[0].getId();
    var fromDate = new Date(Date.now() - 7*1000*3600*24);   //Start of the time range with events to be handled
    var untilDate = new Date(Date.now() + 1*1000*3600*24);    //End of the time range with events to be handled
    var optionalArgs = {
        timeMin: fromDate.toISOString(),
        timeMax: untilDate.toISOString(),
        showDeleted: false,
        singleEvents: true,
        orderBy: 'startTime'
    };
    var service = Calendar.Events;
    var response = Calendar.Events.list(calID, optionalArgs);
    var events = response.items;

    // ----- Loop thru period's events -----
    for (i = 0; i < events.length; i++) {
        Logger.log(events[i].getStartTime());  // <=== THIS RESULTS IN A "TypeError: Cannot find function getStartTime in object" ERROR
        // ----- Process event -----
        // Event update code goes here 
        // Will work on this once I solve the dates problem
    }
}

标签: google-apps-scriptgoogle-calendar-api

解决方案


虽然您是通过 CalendarApp 获取日历 ID,但您正在使用日历 API 来检索日历事件,该事件返回一个事件数组(每个事件都是一个 JSON 对象)。要获取每个事件的开始和结束时间,您必须在循环中访问它们start和属性:end

for (i = 0; i < events.length; i++) {
    var startTime = events[i].start.dateTime;
    var endTime = events[i].end.dateTime;
    console.log(startTime);
    console.log(endTime);
}

您可以在开始编码之前尝试使用API检查将要检索的内容,以便了解要使用的数据的结构。

但是,如果您想使用 CalendarApp 服务而不是 Calendar API,则必须调用getEvents函数,该函数返回一个 CalendarEvent 数组。这些对象确实具有getStartTime函数。


推荐阅读