import { z } from "zod";
import { calendar_v3, google } from "googleapis";
import { DateTime } from "luxon";
//...
const rrule = RRule.fromString(event.recurrence[0].split(":")[1]!);
if (!event.start?.dateTime) return null;
const startDateTime = DateTime.fromISO(event.start.dateTime).setZone(
"UTC",
);
rrule.options.dtstart = startDateTime.toJSDate();
rrule.options.tzid = "UTC";
const utcStartTime = startDateTime.toJSDate();
rrule.options.bysecond = [utcStartTime.getUTCSeconds()]; // Never mentioned in the docs, works for some reason
rrule.options.byminute = [utcStartTime.getUTCMinutes()];
rrule.options.byhour = [utcStartTime.getUTCHours()];
const dates = rrule.all((d, i) => {
return i < 20;
});
console.log(dates.map((d) => d.toLocaleString("en-US"))); // log 1
const meetingModifications: calendar_v3.Schema$Event[] = [];
for (const date of dates) {
const eventModificationId = `${meetingLinkCheck.googleCalendarEventId}_${DateTime.fromJSDate(
date,
)
.setZone("UTC")
.toISO()
?.replaceAll("-", "")
.replaceAll(":", "")
.replaceAll(".", "")
.replace("000Z", "Z")}`;
try {
const eventModification = (
await calendar.events.get({
calendarId: "primary",
eventId: eventModificationId,
})
).data;
if (!eventModification) continue;
meetingModifications.push(eventModification);
} catch (error) {
console.log(eventModificationId, date.toLocaleString("en-US")); // log 2
continue;
}
}
meetingModifications.sort((a, b) => {
const dateTimeA = a.start?.dateTime ?? "";
const dateTimeB = b.start?.dateTime ?? "";
return dateTimeA.localeCompare(dateTimeB);
});
import { z } from "zod";
import { calendar_v3, google } from "googleapis";
import { DateTime } from "luxon";
//...
const rrule = RRule.fromString(event.recurrence[0].split(":")[1]!);
if (!event.start?.dateTime) return null;
const startDateTime = DateTime.fromISO(event.start.dateTime).setZone(
"UTC",
);
rrule.options.dtstart = startDateTime.toJSDate();
rrule.options.tzid = "UTC";
const utcStartTime = startDateTime.toJSDate();
rrule.options.bysecond = [utcStartTime.getUTCSeconds()]; // Never mentioned in the docs, works for some reason
rrule.options.byminute = [utcStartTime.getUTCMinutes()];
rrule.options.byhour = [utcStartTime.getUTCHours()];
const dates = rrule.all((d, i) => {
return i < 20;
});
console.log(dates.map((d) => d.toLocaleString("en-US"))); // log 1
const meetingModifications: calendar_v3.Schema$Event[] = [];
for (const date of dates) {
const eventModificationId = `${meetingLinkCheck.googleCalendarEventId}_${DateTime.fromJSDate(
date,
)
.setZone("UTC")
.toISO()
?.replaceAll("-", "")
.replaceAll(":", "")
.replaceAll(".", "")
.replace("000Z", "Z")}`;
try {
const eventModification = (
await calendar.events.get({
calendarId: "primary",
eventId: eventModificationId,
})
).data;
if (!eventModification) continue;
meetingModifications.push(eventModification);
} catch (error) {
console.log(eventModificationId, date.toLocaleString("en-US")); // log 2
continue;
}
}
meetingModifications.sort((a, b) => {
const dateTimeA = a.start?.dateTime ?? "";
const dateTimeB = b.start?.dateTime ?? "";
return dateTimeA.localeCompare(dateTimeB);
});