Finalmente obtuve la API del calendario de Google para insertar eventos en mi calendario con Node.js, pero el evento se inserta 4 horas antes de la hora de inicio que le di.
Esto es lo que he hecho para que se inserte. En este ejemplo: la variable de fecha es '2022-05-18' y la variable de hora es '17:18' y luego cuando consola.log la variable apptDate, el resultado es 2022-05-18T17:18:00.000Z
pero el evento está insertado en mi calendario el 18-05-2022 a las 13:18.
export const insertGoogleCalendarEvent = async (req, res)=> { try{ const {firstName, lastName, date, time, duration} = req.body const apptDate = new Date(`${date}T${time}:00.000Z`).toISOString() const SCOPES = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events'] const GOOGLE_PRIVATE_KEY = process.env.GOOGLE_PRIVATE_KEY const GOOGLE_CLIENT_EMAIL = process.env.GOOGLE_CLIENT_EMAIL const GOOGLE_PROJECT_NUMBER = process.env.GOOGLE_PROJECT_NUMBER const GOOGLE_CALENDAR_ID = process.env.GOOGLE_CALENDAR_ID let endDateTime = '' if (duration === '60') { let newDate = new Date(apptDate) newDate.setHours(newDate.getHours() + 1) endDateTime = newDate.toISOString() } else if (duration === '75') { let newDate = new Date(apptDate) newDate.setMinutes(newDate.getMinutes() + 75) endDateTime = newDate.toISOString() } else if (duration === '90') { let newDate = new Date(apptDate) newDate.setMinutes(newDate.getMinutes() + 90) endDateTime = newDate.toISOString() } const event = { 'summary': `${firstName} ${lastName}`, 'start': { 'dateTime': `${apptDate}`, 'timeZone': 'Canada/Eastern' }, 'end': { 'dateTime': `${endDateTime}`, 'timeZone': 'Canada/Eastern' } } const jwtClient = new google.auth.JWT( GOOGLE_CLIENT_EMAIL, null, GOOGLE_PRIVATE_KEY, SCOPES ) const calendar = google.calendar({ version: 'v3', project: GOOGLE_PROJECT_NUMBER, auth: jwtClient }) calendar.events.insert({ calendarId: GOOGLE_CALENDAR_ID, resource: event, }, { function (err, event) { if (err) { console.log('this is an error', err) return } console.log('Event created:', event.htmlLink); } }) } catch { console.log('error') } }Una razón podría ser la parte .00Z al final de la variable appDate , ya que se refiere a la zona horaria UTC (Z significa UTC o hora zulú). Intente configurar la zona horaria necesaria utilizando el formato -04:00 (Canadá/Este) al final.
const apptDate = new Date(`${date}T${time}:00-04:00`).toISOString() Después de revisar el problema nuevamente, creo que la API ajustó la fecha y la hora que configuró en la variable apptDate ( .000Z , UTC) a la zona horaria que especificó en la opción timeZone . En este caso, es Canada/Eastern , UTC-4 horas, por lo que eliminó 4 horas de lo que configuró.
La documentación dateTime dice
La hora, como un valor combinado de fecha y hora (formateado según RFC3339). Se requiere un desplazamiento de zona horaria a menos que se especifique explícitamente una zona horaria en timeZone.
Entonces, un enfoque más limpio sería usar apptDate tal como está (UTC), sin la opción timeZone .
const apptDate = new Date(`${date}T${time}:00.000Z`).toISOString() ... 'start': { 'dateTime': `${apptDate}` }, 'end': { 'dateTime': `${endDateTime}` }