Estoy tratando de consultar las estadísticas de la hora que fue hace 5 horas.
Cuando ejecuto este código, veo en los registros que la hora local es 6, por lo que espero que la pastHour sea 1, pero dice 3.
¿Por qué?

var HOURS_BACK = 5; function main() { var past = new Date(new Date().getTime() - HOURS_BACK * 3600 * 1000); var pastHour = past.getHours(); var pastDateStr = getDateStringInTimeZone(past, 'yyyy-MM-dd'); query = "SELECT customer.id, metrics.impressions, segments.hour FROM customer WHERE metrics.impressions = 0 AND segments.hour = " + pastHour + " AND segments.date = '" + pastDateStr + "'"; Logger.log("query " + query); }editar : dejaré el contenido a continuación, pero ahora creo que el misterio del OP no se explica por lo que se publica en la pregunta.
Es importante tener en cuenta cómo funcionan los valores de Fecha. Internamente, una Fecha siempre es una marca de tiempo relativa a UTC. Es decir, si (hipotéticamente) usted y alguien en todo el mundo llamaran simultáneamente new Date().getTime() , ambos obtendrían la misma marca de tiempo. (Obviamente, no es realmente posible, pero imagina que vives en un mundo de dibujos animados).
Sin embargo, las API de fecha como .getHours() funcionan en su hora local . La diferencia entre la hora local y la hora universal causa confusión a muchas personas todo el tiempo, y las cosas solo empeoran cuando los valores de fecha/hora se involucran posteriormente en las operaciones de la base de datos, donde los mismos problemas pueden surgir una vez más.