Saltar al contenido

Conversión de zona horaria en una hoja de cálculo de Google

Solución:

Respuesta corta

No hay una función incorporada, pero puede crear una función personalizada.

Ejemplo

/**
 * Converts a datetime string to a datetime string in a targe timezone.
 *
 *@param {"October 29, 2016 1:00 PM CDT"} datetimeString Date, time and timezone.
 *@param {"Timezone"} timeZone Target timezone
 *@param {"YYYY-MM-dd hh:mm a z"} Datetime format
 *@customfunction
 */
function formatDate(datetimeString,timeZone,format) {
  var moment = new Date(datetimeString);
  if(moment instanceof Date && !isNaN(moment)){
    return Utilities.formatDate(moment, timeZone, format)
  } else {
    throw 'datetimeString can not be parsed as a JavaScript Date object'
  }
}

NOTA:

new Date(string) / Date.parse(string) La implementación en Google Apps Script no admite algunas abreviaturas de zonas horarias.

De https://tc39.es/ecma262/#sec-date-time-string-format

No existe un estándar internacional que especifique abreviaturas para zonas horarias civiles como CET, EST, etc. y, a veces, la misma abreviatura se utiliza incluso para dos zonas horarias muy diferentes.

Relacionado

  • Obtener compensación UTC de las abreviaturas de la zona horaria

Explicación

Para considerar las zonas horarias de verano, el argumento de entrada del valor a convertir debe incluir la fecha, no solo la hora del día. Puede establecer una fecha y zona horaria predeterminadas para construir el datetimeString concatenando antes de llamar a la fórmula.

=formatDate("October 29, 2016 "&A2&" GMT","PDT","hh:mm a")

Para la zona horaria objetivo, además de la abreviatura de tres letras, podríamos usar nombres de base de datos TZ como America/Los_Angeles, ejemplo:

=formatDate("October 29, 2016 "&A2&" GMT","America/Los_Angeles","HH:mm")

Si la abreviatura de la zona horaria y el nombre de TZ fallan para el datetimeString, use las compensaciones de tiempo (es decir, UTC-4).

Ver también

  • Calcular año, mes, días entre fechas en el script de aplicaciones de Google

Referencias

  • https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date

Este tutorial fue increíblemente útil: https://davidkeen.com/blog/2017/01/time-zone-conversion-in-google-sheets/

Google Sheets no tiene una forma integrada de convertir los datos de la zona horaria, pero al usar el poder de Moment.js y el editor de scripts de Google, podemos agregar la funcionalidad de la zona horaria a cualquier hoja.

Estos son los archivos que copié en mi proyecto de script:

  • https://momentjs.com/downloads/moment-with-locales.js guardado como moment.js
  • https://momentjs.com/downloads/moment-timezone-with-data.js guardado como moment-timezone.js

Asegúrese de agregar primero el script moment.js y tenerlo encima del script moment-timezone.js porque moment-timezone.js depende de él.

Entonces en tu otro proyecto de script, su archivo Code.gs puede verse así:

var DT_FORMAT = 'YYYY-MM-DD HH:mm:ss';

/**
https://stackoverflow.com/questions/34946815/timezone-conversion-in-a-google-spreadsheet/40324587
*/
function toUtc(dateTime, timeZone) {  
  var from = m.moment.tz(dateTime, DT_FORMAT, timeZone);//https://momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone/
  return from.utc().format(DT_FORMAT);
}

/**
https://stackoverflow.com/questions/34946815/timezone-conversion-in-a-google-spreadsheet/40324587
*/
function fromUtc(dateTime, timeZone) {
  var from = m.moment.utc(dateTime, DT_FORMAT);//https://momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone/
  return from.tz(timeZone).format(DT_FORMAT);
}

ingrese la descripción de la imagen aquí

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *