es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sequelize: obtener datos de la base de datos por medio de una marca de tiempo con zona horaria.

Estoy intentando obtener datos de postgreSQL utilizando sequelize, donde mi fecha actual es equivalente a la fecha de la marca de tiempo con la zona horaria en la base de datos.

const startDate = new Date().setHours(0, 0, 0, 0);
const endDate = new Date().setHours(24, 60, 60, 60);
return await this.accountRepository.findAll({
   where: {
     '$accountHistory.createdAt$': { $between: [startDate, endDate] },
   },
   include: [{
   model: AccountHistory,
   as: 'accountHistory',
   required: false
  }],              
})
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Este bloque de código intenta obtener datos de una base de datos PostgreSQL utilizando Sequelize, donde la fecha actual es equivalente a la fecha del timestamp con la zona horaria en la base de datos.

    • Primero crea dos variables startDate y endDate que se establecen al inicio y fin del día actual.
    • Luego utiliza el método findAll en accountRepository para buscar registros en la base de datos donde el campo createdAt en el modelo AccountHistory se encuentra entre startDate y endDate.
    • También incluye el modelo AccountHistory en los resultados de la búsqueda estableciendo el campo required en false.

    Es importante destacar que utilizar setHours(24,60,60,60) en la variable endDate puede no producir el resultado esperado debido a que el valor máximo para las horas es 23. Por lo tanto, sería mejor establecer la fecha final al inicio del día siguiente. Aquí tienes una versión mejorada del mismo código:

    const startOfDay = new Date().setHours(0, 0, 0, 0);
    const endOfDay = new Date(startOfDay + 24 * 60 * 60 * 1000);
    
    return await this.accountRepository.findAll({  
       where: {
         '$accountHistory.createdAt$': { $between: [startOfDay, endOfDay] },
       },
       include: [{
         model: AccountHistory,
         as: 'accountHistory',
         required: false
       }],              
    });
    

Comments are closed.