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

249
Vistas
Consulta de Firebase para comparar fechas, que es una cadena con la fecha real

Configuré por error un campo de fecha como una cadena al crear la base de datos de la que no me di cuenta y ahora los documentos en la base de datos realmente han aumentado, por lo que almacena el número de fecha como una cadena en la base de datos de Firestore y quiero hacer una consulta donde comparo si la fecha está entre la fecha de inicio y finalización que proporcioné. ¿Puede alguien ayudarme?

así es como lo almacené en el documento

 date: Date.now().toString()

y las variables para la fecha de inicio y la fecha de finalización

 startDate = new Date(new Date().getFullYear(), new Date().getMonth(), 1); endDate = new Date( new Date().getFullYear(), new Date().getMonth() + 1, 0 ).setHours(23, 59, 59, 999);

y esta es la consulta

 return this.firestore .collection('orders', (orders) => orders .where('date', '>=', this.startDate) .where('date', '<=', this.endDate) .orderBy('date', 'desc') )

esto no funciona, ¿hay alguna forma de evitarlo? o tengo que reestructurar la base de datos de nuevo?

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

Almacenar una fecha en la que desea consultar de esta manera es una mala idea y un antipatrón común:

 date: Date.now().toString()

El formato que obtiene al llamar a toString() ( "Wed Oct 05 2011 07:48:00 GMT-0700 (Mountain Standard Time)" ) está diseñado para mostrarse a humanos y no es adecuado para ordenar y filtrar por código.

Debe almacenar sus valores como Firestore Timestamp o como un formato de cadena que se puede ordenar y filtrar.


El almacenamiento de fechas como una Timestamp de tiempo se puede lograr con:

 date: Date.now()

Con esto, Firestore almacenará el valor como una Timestamp de tiempo, que luego puede ordenar y filtrar con facilidad al pasar los objetos de Timestamp de tiempo o Date a las cláusulas where de su consulta.


El almacenamiento de fechas como una cadena ordenada lexicográficamente se puede lograr con:

 date: Date.now().toISOString()

Con esto, almacenará cadenas en un formato como "2011-10-05T14:48:00.000Z" , que se puede ordenar y usar para realizar consultas de rango.


Actualización : como señaló, su Date.now().toString() le proporciona una marca de tiempo numérica en formato de cadena, por ejemplo, "1657889475842" .

En ese caso, el problema es que está pasando objetos de Date en la consulta, y comparar una fecha con una cadena nunca dará una coincidencia. También debe pasar números como cadenas a where también, o tomar el enfoque que recomendé anteriormente.

about 4 years ago · Santiago Gelvez Denunciar

0

Lo arreglé. esta es la solucion

 return this.firestore .collection('orders', (orders) => orders .where('date', '>=', this.startDate.getTime().toString()) .where('date', '<=', this.endDate.toString()) ) .valueChanges({ idField: 'Id' });
about 4 years ago · Santiago Gelvez 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