簡體   English   中英

大於和小於日期在 sequelize 中沒有記錄,但適用於 heidisql

[英]greater than and less than a date gives no records in sequelize but works with heidisql

真的很奇怪,我無法調試問題。 我也不知道是什么導致了這個問題。

我有如下查詢:

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] ,但我仍然沒有得到任何記錄。

我將相同的查詢復制到 heidsql 並運行它,我在那里得到了結果。

這里發生了什么事? 有人可以解釋一下嗎?

sequelize 中created_onupdated_on數據類型是DATE ,在表中是TIMESTAMP

使用 moment.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 時間,即 1970 年 1 月 1 日之后的秒數

 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

我不知道發生這種情況的原因,我得到了解決方案。 我必須使用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;

如果有人得到任何解釋,請發表評論或隨時編輯此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM