Hey everyone! I found some code online to pull calendar events into a spreadsheet but I’m running into timezone problems. I’m not really a coder, just trying to make this work.
The issue is that I’m in Central Time (Missouri area) and my system timezone is set correctly to Chicago. But ever since daylight saving time kicked in, all the event times that get imported are showing up one hour earlier than what I see in my actual calendar.
Is there a way to modify this script to handle the timezone conversion properly? I’d really appreciate any suggestions!
function syncCalendarEvents() {
var worksheet = SpreadsheetApp.getActiveSheet();
var calId = worksheet.getRange('C1').getValue().toString();
var userCalendar = CalendarApp.getCalendarById(calId);
// Define date range
var fromDate = worksheet.getRange('C2').getValue();
var toDate = worksheet.getRange('C3').getValue();
var filterText = '';
// Create header row
var headerRow = [["Event Name", "Venue", "Begin Time", "Finish Time", "Hours"]];
var headerRange = worksheet.getRange("A8:E8");
headerRange.setValues(headerRow);
headerRange.setFontWeight("bold")
// Retrieve events
var eventList = (filterText == '') ? userCalendar.getEvents(fromDate, toDate) : userCalendar.getEvents(fromDate, toDate, {search: filterText})
// Process each event
for (var j=0; j<eventList.length; j++) {
var currentRow = j+9;
var eventData = [[eventList[j].getTitle(), eventList[j].getLocation(), eventList[j].getStartTime(), eventList[j].getEndTime(), '']];
var dataRange = worksheet.getRange(currentRow,1,1,5);
dataRange.setValues(eventData);
// Apply time formatting
var startCell = worksheet.getRange(currentRow, 3);
startCell.setNumberFormat('mm/dd/yyyy hh:mm');
var endCell = worksheet.getRange(currentRow, 4);
endCell.setNumberFormat('mm/dd/yyyy hh:mm');
// Calculate duration
var durationCell = worksheet.getRange(currentRow, 5);
durationCell.setFormula('=(HOUR(D' + currentRow + ')+(MINUTE(D' +currentRow+ ')/60))-(HOUR(C' +currentRow+ ')+(MINUTE(C' +currentRow+ ')/60))');
durationCell.setNumberFormat('0.00');
}
}