Según Wikipedia, El tiempo universal coordinado o UTC es el principal estándar de tiempo por el cual el mundo regula los relojes y el tiempo. Es uno de los varios sucesores estrechamente relacionados con el tiempo medio de Greenwich (GMT).
Firebase entonces siempre nos entrega las horas en UTC. El problema es que si tienes alguna funcionalidad que dependa de la hora local, jamás va a coincidir la hora que Firebase te da, con la de tu zona horaria. Tendrás que procesarla antes de usarla.
A Colombia por ejemplo, le corresponde la zona horaria UTC-5 lo que quiere decir que nos encontramos 5 horas por detrás del meridiano de Greenwich. Aquí te va un ejemplo de cómo ajustar la hora para que coincida con tu hora local y no mueras en el intento:
En este ejemplo, necesito asignar a la fecha de inicio (variable inicio) el día de hoy a primera hora de la mañana (12:00:00 a.m.). Y a la fecha de fin (variable fin) el día de hoy a ultima hora del día (11:59:59 p.m.). Entonces:
Defino una variable para guardar cada una de las fechas en formato UTC que es el que me entrega Firebase. Estas variables tienen el mismo valor pero más delante las utilizaremos de diferente manera:
const inicioUtc = new Date();
const finUtc = new Date();
Seteo en cada variable las horas que necesito, de manera que la de inicio corresponda a la primera hora de la mañana y la de fin corresponda a la última de la noche:
inicioUtc.setHours(0, 0, 0, 0);
finUtc.setHours(23, 59, 59, 999);
A cada una de las fechas le sumo las 5 horas de diferencia que tenemos con la zona horaria UTC:
const inicio = new Date(inicioUtc.getTime() + 5 * 60 * 60 * 1000);
const fin = new Date(finUtc.getTime() + 5 * 60 * 60 * 1000);
Y listo!
Ten en cuenta que si haces test de manera local, las cuentas no te van a dar.