博文为博主原创,转载请附上本文链接。
eggjs,日期赛选 报错 ISODate is not defined
原因是这样的,
博主用eggjs从mongo赛选 时间范围 2020-06-10 到2022-01-01的登录日志
博主的赛选条件是这样的
if(params.startDate){ //赛选框赛选 这里注意 赛选的列表和统计都要加赛选条件
debugger
paramsSet["$facet"]["data"].unshift(
{
$match: {
createdAt: {
$gte:ISODate(params.startDate),
$lte:ISODate(params.endDate)
}
}
}
)
paramsSet["$facet"]["total"].unshift({$match:{createdAt: {$gte: ISODate(params.startDate),$lte: ISODate(params.endDate)}}})
}
解决方案
paramsSet["$facet"]["data"].unshift(
{
$match: {
createdAt: {
$gte:new Date(params.startDate),
$lte:new Date(params.endDate),
}
}
}
)
这里只是解决了 2022-02-10 <= x <2022-02-11
而实际你要解决的是 2022-02-10 00:00:00 <= x <2022-02-10 11:59:59 也就是当天(准确说应该是小于第二天)
那往下看,要达到的效果应该如下
你要写个方法来解决 日期运算问题
//获取几天前时间
getPreDate(pre,date,type) {//type 如果是true 就赛选返回那天的前一天 59分59秒
let self = this;
let c = new Date();
if(date){
c=new Date(date)
}
c.setDate(c.getDate() - pre);
if(type){
return self.formatDate(c)+" 23:59:59"
}else{
return self.formatDate(c);
}
}
formatDate(d) {
let self = this;
return d.getFullYear() + "-" + self.getMonth1(d.getMonth()) + "-" + self.getMonth1(d.getDate(), "getDate")
}
getMonth1(m,type) {
let self = this;
if (type != "getDate") {
m++;
}
if (m < 10)
return "0" + m.toString();
return m.toString();
}
前端请求如下
controller接口处理如下,因为我user.js继承了comsys,所以可以直接用里面的方法
params.endDate=m.getPreDate(-1,params.endDate)
serve不需要做改变
博文为博主原创,转载请附上本文链接。