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
相关产品推荐
相关产品推荐

