[英]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_on
和updated_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.