在日历中创建事件的脚本.我的谷歌工作表和日历之间有50分钟的差距



我正在使用这个惊人的脚本从谷歌工作表中创建一个事件。它运行得很好,但活动的创建与我工作表中的开始日期相差50分钟。我想不通。例如日期标题开始时间结束时间位置描述类型重复
2022年4月5日测试06:40:00 07:10:00 Sion测试将创建一个开始时间为7:30的活动!

这是关于时区差异吗?

//    Date | Title | Start Time | End Time | Location | Description | Type | Recurring | EventID
function exportEventsAvecferie() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Evénements récurents - Avec fériés");
var headerRows = 1;  // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "ID@group.calendar.google.com"; //CalendarApp.getDefaultCalendar().getId();// use default claendar for tests
var cal = CalendarApp.getCalendarById(calId);
for (i in data) {
if (i < headerRows) continue; // Skip header row(s)
var row = data[i];
var date = new Date(row[0]);  // First column
var title = row[1];           // Second column
var tstart = setTimeToDate(date,row[2]);
var tstop = setTimeToDate(date,row[3]);
Logger.log('date = '+date+'tstart = '+tstart+'  tstop = '+tstop);
var loc = row[4];
var desc = row[5];
var type = row[6];
var times = row[7]
var id = row[8]; 
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
event.setTitle('got you');
}catch(e){
var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc});
row[8] = newEvent.getId();  // Update the data array with event ID
Logger.log('event created');
var event = cal.getEventSeriesById(row[8]);
}
event.setTitle(title);
event.setDescription(desc);
event.setLocation(loc);
if(type=='M'){
var recurrence = CalendarApp.newRecurrence().addMonthlyRule().times(times);
event.setRecurrence(recurrence, tstart, tstop);
}else if(type=='S'){
var recurrence = CalendarApp.newRecurrence().addWeeklyRule().times(times)
event.setRecurrence(recurrence, tstart, tstop);
}
data[i] = row ;
}
range.setValues(data)
}
function setTimeToDate(date,time){
var t = new Date(time);
var hour = t.getHours();
var min = t.getMinutes();
var sec = t.getSeconds();
var dateMod = new Date(date.setHours(hour,min,sec,0))
return dateMod;
}

我能够重现并修复问题。要使此代码工作,您需要在中同步时区

  • 电子表格:文件>设置>时区

  • 脚本编辑器:项目设置>时区

  • 日历:设置>时区

一旦我在这三个地方设置了相同的时区(例如,GMT+01:00巴黎(,脚本就开始正常工作。

也许有一种方法可以计算这些时区之间的差异并更改事件的时间。类似于以下内容:https://stackoverflow.com/a/35691298/14265469(不过不适合胆小的人(

最新更新