如何使用Sequelize按deliveryDate获取当日所有记录
用Sequelize查询指定日期当天的所有记录
你当前的代码用findOne做精确时间匹配,只能拿到时间完全一致的单条记录,要实现忽略时间戳查询当天所有记录,需按以下方式修改:
- 首先导入Sequelize的操作符(如果还没导入):
const { Op } = require('sequelize'); // CommonJS 语法 // 或 ES 模块语法:import { Op } from 'sequelize';
- 处理传入的
deliveryDate参数,生成当天的起始时间和次日起始时间,以此作为查询区间:
// 将传入的日期字符串转为Date对象 const targetDate = new Date(deliveryDate); // 当天00:00:00 const startOfDay = new Date(targetDate.getFullYear(), targetDate.getMonth(), targetDate.getDate()); // 次日00:00:00 const startOfNextDay = new Date(startOfDay); startOfNextDay.setDate(startOfNextDay.getDate() + 1); // 执行查询,用findAll获取多条记录 const result = await Order.findAll({ where: { leaderId: leaderId, deliveryDate: { [Op.gte]: startOfDay, // 大于等于当天起始 [Op.lt]: startOfNextDay // 小于次日起始 } } });
关键说明:
- 用
findAll替代findOne,因为需要返回多条当天的记录 - 通过
Op.gte和Op.lt构建时间区间,确保覆盖当天从00:00:00到23:59:59的所有记录,不管传入参数的具体时间是什么 - 这种方式兼容不同数据库的时间类型处理,避免因数据库时区问题导致的匹配误差
内容的提问来源于stack exchange,提问作者rai8
相关产品推荐
相关产品推荐

