больше и меньше даты не дает записей в sequelize, но работает с heidisql - PullRequest
0 голосов
/ 24 марта 2020

Это действительно странно, я не могу отладить проблему. Я также не знаю, что является причиной проблемы.

У меня есть запрос, подобный приведенному ниже:

const sequelize = require('sequelize')
const Op = sequelize.Op
const TODAY_START = new Date().setHours(0, 0, 0, 0)
const NOW = new Date()

    const  data = await AssignedJob.findAll({
        where: {
            created_on: {
                [Op.gt]: TODAY_START,
                [Op.lt]: NOW
            }
        }
    })

Он генерирует запрос, как показано ниже.

SELECT `id`, `emp_id`, `zone_id`, `job_id`, `status`, `commission`, `rating`,
`created_by`, `updated_by`, `created_on`, `updated_on` 
FROM `assigned_jobs` AS `AssignedJob` 
WHERE (`AssignedJob`.`created_on` > '2020-03-24 00:00:00' AND `AssignedJob`.`created_on` < '2020-03-24 17:18:15');

Но data - это просто [] пустой массив.

Я также пытался использовать [Op.between]: [START_DATE, NOW], но все равно не получил никакой записи.

Я скопировал тот же запрос в heid sql и запустил его, я получил результат там.

Что здесь происходит? Может кто-нибудь объяснить?

Тип данных created_on и updated_on в дальнейшем составляет DATE, в таблице это TIMESTAMP

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Я не знаю причину, по которой это происходит, у меня есть решение для этого. Я должен использовать momentjs для достижения этого.

const moment = require('moment')
const now = moment()
const  todayAssignedJobs = await AssignedJob.findAll({
         where: {
            created_on: {
                 [Op.gt]: now.startOf('day').toString(),
                 [Op.lt]: now.endOf('day').toString()
              },
            status: 1
           }
     })

Тот же запрос все еще генерируется, но он дает результат, а не пустой массив.

SELECT `id`, `emp_id`, `zone_id`, `job_id`, `status`, `commission`, `rating`, `created_by`, `updated_by`, `created_on`, `updated_on` FROM 
`assigned_jobs` AS `AssignedJob`
WHERE 
(`AssignedJob`.`created_on` > '2020-03-24 00:00:00' AND `AssignedJob`.`created_on` <'2020-03-24 23:59:59') 
AND `AssignedJob`.`status` = 1;

Если кто-то получил какое-либо объяснение, пожалуйста, прокомментируйте или не стесняйтесь редактировать этот ответ.

0 голосов
/ 24 марта 2020

Используйте момент. js для форматирования даты в 'YYYY-MM-DD HH:mm:ss'

const sequelize = require('sequelize')
const moment = require('moment');
const Op = sequelize.Op

function getDate(withoutTime) {
    const date = new Date();
    if (withoutTime) date.setHours(0, 0, 0, 0);
    return moment(date).format('YYYY-MM-DD HH:mm:ss');
}

const TODAY_START = getDate(true); // '2020-03-24 00:00:00'
const NOW = getDate(); // '2020-03-24 17:47:41'

Проблема const TODAY_START = new Date().setHours(0, 0, 0, 0) приведет к Unix времени, т.е. секундам после 1 января 1970

const date = new Date().setHours(0, 0, 0, 0)

console.log(date); // return seconds after 1970 

const date1 = new Date();
date1.setHours(0, 0, 0, 0);

console.log(date1); // return date
...