Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!