Me di cuenta de que hay un comportamiento extraño cuando se usa una cláusula where() en un campo de Timestamp de tiempo en una query() . Estoy usando la versión modular 9 de Firebase.
Quizás alguien tenga una explicación para eso.
Aquí están los datos que veo en la consola de Firebase/Firestore:
Suponiendo que hoy es el 27 de diciembre de 2021 , quiero consultar todos los documentos para este día; en este caso, solo el documento anterior.
Usaría la siguiente consulta (es decir, todo después de hoy a la medianoche y antes de mañana a la medianoche):
const today = new Date(new Date().setHours(0,0,0)); const tomorrow = new Date(new Date(today).setDate(today.getDate() + 1)); const docQuery = query(collection(getFirestore(firebaseApp), 'ticks1'), where('date', '>=', today), where('date', '<', tomorrow) ) const querySnapshot = await getDocs(docQuery) console.log('documents count:', querySnapshot.docs.length)Pero: ¡esto no devuelve resultados!
documents count: 0En cambio, si cambio el valor en la base de datos a 12:00:01 AM (ver más abajo), funciona y recupero el documento esperado.
documents count: 1¿Alguien puede explicar este comportamiento, o es un error en la implementación de Firestore?
En lugar del rango [today 12:00:00 AM, tomorrow 12:00:00 AM) , estoy usando este rango de fechas ahora: (yesterday 11:59:59 PM, today 11:59:59 PM]
const now = new Date() const dateFrom = new Date(new Date(new Date(now).setDate(now.getDate() - 1)).setHours(23,59,59)) const dateTo = new Date(new Date(dateFrom).setDate(dateFrom.getDate() + 1)); const docQuery = query(collection(getFirestore(firebaseApp), 'ticks1'), where('date', '>', dateFrom), where('date', '<=', dateTo) ) const querySnapshot = await getDocs(docQuery) console.log('documents count:', querySnapshot.docs.length) documents count: 1Al menos esto tiene sentido, aunque parezca un poco extraño.