Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

187
Vistas
¿Por qué la API de Google Calendar inserta mi evento 4 horas antes de la fecha/hora que le he dado usando Node.js?

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') } }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

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.

Ejemplo

 const apptDate = new Date(`${date}T${time}:00-04:00`).toISOString()

Actualizar

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 .

Ejemplo

 const apptDate = new Date(`${date}T${time}:00.000Z`).toISOString() ... 'start': { 'dateTime': `${apptDate}` }, 'end': { 'dateTime': `${endDateTime}` }

Más información

Documentación de la API de calendario

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda