贝利信息

如何使用 Sequelize 查询创建时间距今一年后的记录

日期:2026-01-06 00:00 / 作者:心靈之曲

本文介绍如何在 sequelize 中正确查询 `createddate` 字段值为当前日期一年之后的数据库记录,重点解决因日期构造错误导致的查询失败问题,并提供可直接使用的代码示例与关键注意事项。

在使用 Sequelize 进行时间范围查询时,一个常见误区是误将“一年后”理解为“今年某月某日”,而实际需求往往是从当前时刻起算,向未来推移一整年(例如:现在是 2025-07-19 14:30:00,则一年后是 2025-07-19 14:30:00)。你提供的原始代码:

[Op.gte]: new Date(new Date().getFullYear(), 1)

存在两个关键问题:

✅ 正确做法是基于当前时间动态计算“一年后”的精确时间点:

const now = new Date();
const oneYearLater = new Date(now);
oneYearLater.setFullYear(now.getFullYear() + 1);

// 在 Sequelize 查询中使用
return this.findAll({
  where: {
    createdDate: {
      [Op.gte]: oneYearLater
    }
  }
});

? 重要注意事项:

? 总结:时间查询的核心是“语义准确 + 构造安全”。永远优先基于 new Date() 实例做增量修改(如 setFullYear),避免硬编码月份/日期,才能确保跨年、闰年、时区等场景下的健壮性。