Filtrar fechas en Supabase usando DayJS
Para filtrar fechas en Supabase de forma adecuada usando la libreria DayJS habría que tener en cuenta el formato en los que se guardan en la base de datos, el timezone y cómo se debe consultar.
Por defecto, los campos de Supabase definidos como timezonez, se guardan en formato UTC, por lo tanto habría que hacer la comparativa de fechas teniendo esto en mente.
Mediante DayJS se puede filtrar obtener la fecha actual (por ejemplo), convertir a lo que se necesita y pasarla finalmente a UTC:
const todayUtcStart = dayjs().startOf("date").utc();
En el ejemplo anterior, se interpreta de la siguiente forma:
- Se obtiene la fecha actual.
- Mediante startOf(«date») convierte la fecha al momento en el que se inicia el día (es decir, con horas y minutos 00:00). (Documentación de DayJS en este enlace).
- Mediante utc() se convierte la fecha a UTC
Para hacer la consulta en Supabase se debe convertir dicha consulta a toISOString():
query = query.gte("dueDate", todayUtcStart.toISOString());
En un ejemplo concreto, si se quiere obtener datos de la Base de Datos de aquellas fechas que coincidan con el día completo de hoy sería de esta forma usando los comparadores «gte» y «lte» (Documentación de Supabase).
const todayUtcStart = dayjs().startOf("date").utc();a UTC
const todayUtcEnd = dayjs().endOf("date").utc();
query = query.gte("dueDate", todayUtcStart.toISOString());
query = query.lte("dueDate", todayUtcEnd.toISOString());
Las consulta de Supabase se pueden ejecutar mediante React Query como ya escribí en este post para simplificar y optimizar las queries realizadas. El objetivo es que cuando se quiera filtrar fechas en Supabase usando DayJS sea rápido y sencillo a la par que flexible para obtener nuevas opciones basado, por ejemplo, en días de la semana o mes.