如何使用Sequelize获取今日至7天前的数据?
问题分析与修复方案
核心问题
字符串无法直接做日期运算
你通过toISOString().slice(0,10)得到的endDate是字符串格式(比如"2024-05-20"),用字符串减7会得到NaN,完全不是正确的7天前日期。必须基于Date对象完成日期计算后,再转成字符串格式。between参数顺序颠倒
多数ORM的between语法要求参数为[起始日期, 结束日期],你写反成了[endDate, startDate],会导致查询范围逻辑错误。
修复后的代码
var datetime = new Date(); let endDate = datetime.toISOString().slice(0,10); // 今日 // 基于Date对象计算7天前日期,再转成ISO字符串格式 const startDate = new Date(datetime.setDate(datetime.getDate() - 7)).toISOString().slice(0,10); const places = await Places.findAll({ where: {createDate: {between : [startDate, endDate]}} });
说明
- 先通过
getDate() -7获取7天前的日期数值,用setDate()修改原Date对象,再转成ISO格式字符串,确保startDate是正确的日期字符串。 - 调整
between的参数顺序,保证是「早日期在前,晚日期在后」,符合数据库查询的范围逻辑。
内容的提问来源于stack exchange,提问作者Thush Dananjan
相关产品推荐
相关产品推荐

