搜索时间戳大于X天的对象

时间:2016-12-22 20:19:42

标签: javascript mongodb date math

本周我已经烧坏了自己很糟糕!我没有修复一个应该用一些基础数学解决的bug。

我有一些"事件"在我的mongodb数据库中,它们是通过日期字段创建的,在预保存挂钩中我计算了年份中的日期并将其放在模型上。例如。

1月1日= 1

1月5日= 5

12月31日= 365

我的应用的用户可以搜索比当前日期提前X天的事件。我的查询类似于:

{
     day_number: { $gte: start_day, $lte: end_day}
}

现在年底已经出现,有一个逻辑错误。

让我们说12月22日到1月2日的输入

我的询问是:

{
    day_number: { $gte: 356, $lte: 2}
}

这当然不会返回任何结果,因为没有数字大于或等于356且小于或等于2.

关于修复此问题的任何建议都不涉及屠杀虽然破坏但简单的查询?

2 个答案:

答案 0 :(得分:2)

您可以测试结束日是否小于开始日,然后像这样调整结束日:

var start_day;
var end_day;
var numDaysInbetween = 0;
var day_number = {}

/* test 1 */
start_day = 50;
end_day = 55;

/* test 2 */
start_day = 356;
end_day = 2;

if (start_day > end_day) {
  end_day += 365;
}
day_number = { $gte: start_day, $lte: end_day };

alert(day_number.$lte - day_number.$gte);

答案 1 :(得分:1)

计算机系统中的大部分时间计算使用自1970-01-01 0:00相当任意的日期以来经过的毫秒数作为可排序的时间变量。

您可以应用相同的原则,但使用自2016-01-01以来的天数,这将使1月2日==第367天。这样查询不需要更改,您的"钩子"只需要一个小模块。