Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

252
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda