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

Google Sheet转Google Calendar时间异常问题排查求助

问题排查与解决方案

你的问题出在代码对日期字符串的处理方式,不是Sheet的格式问题。Sheet里的日期是逗号分隔的字符串(如2023, 2, 1, 11, 0, 0),直接传给new Date()会导致解析错误——JavaScript的Date构造器无法正确识别这种格式的字符串,最终生成错误的时间戳,反映到Calendar里就出现了日期和时间偏移。

修正方案

需要手动拆分单元格的字符串,提取年、月、日、时、分、秒,注意JavaScript的Date月份是从0开始计数(1月对应0,2月对应1,以此类推),再用这些参数构造正确的Date对象。

修改后的代码

function createEvent() {
  var spreadsheet = SpreadsheetApp.openById('SpreadsheetId');
  var sheet = spreadsheet.getSheetByName('SheetName');
  var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
  var calendar = CalendarApp.getCalendarById('Calendar ID');

  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var title = row[31]; // Column AF
    var description = row[3]; // Column D
    
    // 处理开始日期
    var startStr = row[25];
    var startParts = startStr.split(',').map(part => parseInt(part.trim(), 10));
    // 月份减1,适配JS Date的0-based月份规则
    var startDate = new Date(startParts[0], startParts[1]-1, startParts[2], startParts[3], startParts[4], startParts[5]);
    
    // 处理结束日期
    var endStr = row[26];
    var endParts = endStr.split(',').map(part => parseInt(part.trim(), 10));
    var endDate = new Date(endParts[0], endParts[1]-1, endParts[2], endParts[3], endParts[4], endParts[5]);

    var event = calendar.createEvent(title, startDate, endDate, { description: description });
    Logger.log('Event ID: ' + event.getId());
  }
}

额外说明

  • split(',')将字符串按逗号拆分,map(part => parseInt(part.trim(), 10))去除每个元素的空格并转换为数字
  • 月份减1是关键:原Sheet中的2月会被JS Date默认解析为3月,这也是你看到日期偏移一天的核心原因
  • 确保脚本时区与Calendar时区一致(GMT+07:00):可在脚本编辑器的「文件」→「项目属性」→「信息」中查看和设置,避免额外时间偏移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:46:13