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

Google表单提交生成PM日历事件时时间默认AM的问题求助

解决Google Apps Script创建日历事件时时间AM/PM错误问题

我是一名教育工作者,刚接触脚本编写,写了一段Google Apps Script实现Google表单提交时自动创建日历事件(用于学校团队提前离校申请)。当前代码能保证日期和小时数值正确,但所有事件时间默认被设为凌晨(比如2点、3点),而实际大部分应为下午时段。之前尝试用if语句判断小时<4时加12来修复,结果日期出错且时间仍不正确,求修正方案。

修改后的完整代码

function createCalEvent(e) {
  Logger.log(e);
  
  var cal = CalendarApp.getCalendarById("c_2d83fb444341942e6e44b791b97bd5db57611ab24aebfc16ed17a8b4a5ca0ad2@group.calendar.google.com");
  var name = e.namedValues["Coach/Advisor Name"][0];
  var team = e.namedValues["Team/Club/Organization"][0];
  var descr = e.namedValues["Name of Event"][0];
  var location = e.namedValues["Location to be released to"][0];
  
  // 解析日期和时间
  var dateParts = e.namedValues["Date of Event"][0].split('/');
  var timeParts = e.namedValues["Time for Release"][0].split(':');
  var hrs = parseInt(timeParts[0], 10);
  var mnts = parseInt(timeParts[1], 10);
  
  // 转换下午时间:提前离校场景下1-4点应为下午,转为24小时制
  if (hrs >= 1 && hrs < 4) {
    hrs += 12;
  }
  
  // 创建开始时间对象
  var startTime = new Date(dateParts[2], dateParts[0]-1, dateParts[1]);
  startTime.setHours(hrs, mnts, 0, 0);
  
  // 设置结束时间(15分钟后)
  var endTime = new Date(startTime.getTime() + 900000);
  
  Logger.log('start='+startTime+'  end='+endTime);
  
  // 创建日历事件并添加提醒
  cal.createEvent('Early Release for '+team, startTime, endTime, {
    'description': descr+' submitted by '+name+' (please release to '+location+')'
  });
  cal.addEmailReminder(15);
  cal.addPopupReminder(15);
}

关键修正点

  • 时间类型转换:将拆分后的小时、分钟字符串转为整数(parseInt),避免字符串运算导致的逻辑错误
  • AM转PM逻辑:根据提前离校的场景,判断1-4点的时间应为下午,直接给小时数加12转为24小时制,不会触发日期变更(因为1+12=13,未超过24)
  • 代码可读性优化:变量名更清晰(如dateParts代替date),补充关键逻辑注释

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:05:28