Estoy intentando configurar un activador en un proyecto de Google Apps Script que se ejecuta una vez al día a la misma hora. Para evitar problemas con el horario de verano, configuré la zona horaria de la hoja de cálculo en GMT-0 y la configuré como GMT-0 en la configuración del proyecto Apps Script. Sin embargo, esto es lo que se me presenta cuando creo un disparador:
GMT-6. Esta es mi zona horaria real. Vi que otras personas tenían problemas con esto, así que probé la solución de esta respuesta. No funcionó. Este es el código exacto que usé:
function addTrigger() { // main() will be called weekly on Monday at 16:00 in the specified time zone var everyWeek = ScriptApp.newTrigger("setTrigger") .timeBased() .everyWeeks(1) .onWeekDay(ScriptApp.WeekDay.MONDAY) .inTimezone("Etc/UTC") .atHour(16) .create(); } Todo lo que hizo fue crear un disparador a las 16:00 en GMT-6. Ignoró por completo el .inTimezone("Etc/UTC") .
Intenté usar una VPN para falsificar mi ubicación y ver si eso permite que la zona horaria cambie de GMT-6, no fue así. ¿Hay algún lugar en mi cuenta de Google del que se extraiga y obtenga GMT-6? Revisé mi Google Calandar y tenía GMT-0 como predeterminado, no hizo ninguna diferencia.
Cuando obtengo la fecha actual en un script, obtengo una fecha y hora en GMT-0. Entonces, básicamente hay un desplazamiento constante de 6 horas entre lo que hago en un guión y cuando funcionan los disparadores. Parece que todo sigue a GMT-0 excepto los disparadores que de alguna manera se aferran a GMT-6.
Por favor, que alguien me diga cómo puedo cambiar la zona horaria de los disparadores. He perdido demasiado tiempo en un tema tan estúpido.
Mi archivo appsscript.json tiene el siguiente aspecto:
{ "timeZone": "Etc/UTC", "dependencies": {}, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8" }Todo lo que hizo fue crear un disparador a las 16:00 en GMT-6. Ignoró por completo el .inTimezone("Etc/UTC").
Creo que esto es inexacto. Después de la prueba, descubrí que se creó un disparador a las 16:00 en UTC. Aunque el tablero de la interfaz de usuario todavía puede mostrar GMT-6 el activador real se crea en la zona horaria especificada. Creo que esto es solo un error de interfaz de usuario.
Si el proyecto de secuencia de comandos está vinculado a una hoja de cálculo, puede ser más fácil usar la zona horaria de la hoja de cálculo, ya que es fácil de verificar y configurar en Archivo > Configuración de la hoja de cálculo. Para usar la zona horaria de la hoja de cálculo, reemplace 'Etc/UTC' con SpreadsheetApp.getActive().getSpreadsheetTimeZone() .
Para que el código sea más fácil de leer, configura la zona horaria como lo último antes .create() , así:
function addTrigger() { const timezone = SpreadsheetApp.getActive().getSpreadsheetTimeZone(); const weeklyTrigger = ScriptApp.newTrigger('myFunctionToRunWeekly') .timeBased() .everyWeeks(1) .onWeekDay(ScriptApp.WeekDay.MONDAY) .atHour(16) .inTimezone(timezone) .create(); }¿Puede ser la forma en que está formateando su disparador?
Esto es algo que haría al crear uno.
function setUpTrigger() { ScriptApp.newTrigger('setTrigger') .timeBased() .everyWeeks(1) .onWeekDay(ScriptApp.WeekDay.MONDAY) .atHour(16) .nearMinute(0) .inTimezone('Etc/UTC') .create(); } function setTrigger() { //Your stuff that happens every monday at 1600 }También tenga en cuenta que si usa atHour, la hora sería en cualquier momento entre las 1600 y las 1700.
Si incluye algo como nearMinute(0), también habrá un intervalo de 15 minutos +/- para que se ejecute el disparador.