Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

255
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!