You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apps Script结合Google Sheets创建日历事件 起止日期相同报错解决方案

报错根因

你碰到的报错是Google日历createAllDayEvent方法的固定校验规则导致的:

全天事件的结束日期采用排他计算逻辑:接口会把你传入的结束日期当做事件不包含的起始点。举个例子,如果你要创建10月5日当天的全天休假事件,接口要求传入的结束日期必须是10月6日,才会识别为10月5日全天的事件;如果传入和开始日期相同的10月5日,系统会判定事件时长为0,触发「开始日期必须早于结束日期」的错误。

修复方案

逻辑非常简单:在创建事件前先做一次判断,如果开始日期和结束日期是同一天,就把传给接口的结束日期往后顺延1天即可;如果是跨天申请,就保持原来的结束日期不变,完全不影响原有跨天休假的逻辑,日历端显示也完全符合预期。
你可以直接用下面的代码替换你原来对应的代码块:

else if (approval == Approval.Approved) {
// 适配单天全天事件的日期规则
let eventEndDate = endDate;
// 判断如果起止日期为同一天,将结束日期向后顺延1天
if (startDate.getTime() === endDate.getTime()) {
  eventEndDate = new Date(endDate);
  eventEndDate.setDate(eventEndDate.getDate() + 1);
}

// 审批通过后创建日历事件
CalendarApp.getCalendarById(email)
    .createAllDayEvent(
        'OOO - Out Of Office',
        startDate,
        eventEndDate, // 这里传入处理后的结束日期
        {
          description: message,
          guests: additionalEmail,
          sendInvites: true,
        });
新手注意事项
  • 替换代码时只需要替换你原来写的else if (approval == Approval.Approved) { ... }这一整段即可,其他代码不需要改动
  • 顺延1天的逻辑只会在起止日期完全相同的时候触发,跨天休假申请会直接走原有逻辑,不会出现日期多算1天的问题
  • 单天休假场景下虽然传给接口的是顺延1天的日期,但Google日历会自动识别为申请当天的全天事件,不会显示为两天假期,你可以先拿测试表单提交1条单天申请验证效果,不会影响正式日历数据

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:45:39