本周我已经烧坏了自己很糟糕!我没有修复一个应该用一些基础数学解决的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.
关于修复此问题的任何建议都不涉及屠杀虽然破坏但简单的查询?
答案 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天。这样查询不需要更改,您的"钩子"只需要一个小模块。