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);
}