Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

563
Vistas
Firestore: no se puede hacer coincidir la medianoche con el filtro de fecha en la cláusula where()

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:

ingrese la descripción de la imagen aquí

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: 0

En 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.

ingrese la descripción de la imagen aquí

 documents count: 1

¿Alguien puede explicar este comportamiento, o es un error en la implementación de Firestore?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Solución alternativa que estoy usando en este momento

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: 1

Al menos esto tiene sentido, aunque parezca un poco extraño.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda