You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

调用Calendar API的events.insert插入事件报错:Missing end time,寻求解决方案

Troubleshooting the "Missing end time" Error in Google Calendar API's events.insert

Hey there, let's dig into fixing this frustrating error together. The "Missing end time" message usually boils down to issues with how you're structuring your event object, even if you followed the examples. Let's break down the most likely fixes:

1. Double-Check Your Event Object Structure

Google Calendar API is strict about matching the start and end fields. Here are the two valid formats you need to follow:

For timed events (with dateTime):

Make sure both start and end use dateTime and share the same time zone (either explicitly via timeZone or embedded in the ISO string):

const event = {
  summary: 'Team Sync',
  description: 'Weekly check-in',
  start: {
    dateTime: '2024-05-20T14:00:00+02:00', // ISO format with timezone offset
    timeZone: 'Europe/Paris' // Optional but recommended for clarity
  },
  end: {
    dateTime: '2024-05-20T15:00:00+02:00',
    timeZone: 'Europe/Paris'
  }
};

For all-day events (with date):

Note that the end date must be one day after the start date (this is a common gotcha):

const event = {
  summary: 'Company Holiday',
  start: {
    date: '2024-07-04'
  },
  end: {
    date: '2024-07-05' // Critical: end date is next day for all-day events
  }
};

2. Debug Your Event Object Before Inserting

Even if you think your event is correct, print it to the console right before calling events.insert to confirm:

console.log('Event being inserted:', JSON.stringify(event, null, 2));
calendar.events.insert({
  calendarId: 'primary',
  resource: event
}, (err, res) => {
  // ... your callback logic
});

Look for:

  • Missing end field entirely (easy typo like ends instead of end)
  • Mismatched types (e.g., start.dateTime paired with end.date)
  • Invalid ISO date strings (check for typos in dates/times)

3. Don't Reuse List Events Logic for Insert

You mentioned your addEvents function matches listEvents—but these are very different operations! listEvents fetches data, while insert requires a fully structured resource object. Make sure you're not accidentally passing list-style parameters (like timeMin/timeMax) to the insert call instead of the event resource.

4. Skip Downgrading googleapis (Use Stable Latest Version)

Downgrading to 24.0.0 is rarely the fix here. Newer versions of the googleapis package maintain compatibility with Calendar API v3. Instead, ensure you're using the correct syntax for the version you have:

// For modern googleapis versions (v100+), the setup looks like this:
const { google } = require('googleapis');
const calendar = google.calendar('v3');

// Ensure you're passing the event as the `resource` property
calendar.events.insert({
  calendarId: 'primary',
  resource: event // This is non-negotiable for insert
});

5. Verify Time Zone Consistency

If you're using timeZone, make sure it's a valid IANA time zone (e.g., America/New_York, not just EST). Mixing time zones between start and end can also trigger this error, even if both fields exist.


9 times out of 10, this error comes down to a small oversight in the event object's structure. Printing the event before insertion will almost always reveal the issue.

内容的提问来源于stack exchange,提问作者Rohit Naik

火山引擎 最新活动