Meteor + MongoDB:检查日期是否在

时间:2015-10-26 16:06:13

标签: javascript mongodb meteor

我很难从MongoDB显示我的记录。基本上我有一些字段' leaves_start'和' leaves_end'在我的MongoDB中。此字段包含用户休假的日期范围。见下面的例子。

user_name:junel

leaves_start:2015年5月10日

leaves_end:10/10/2015

如果当前日期(例如2015年7月10日)在记录的leaves_start和leaves_end范围内,我想获取MongoDB中的所有记录。

我已经尝试了$ gte和$ lte,但我对如何在当前状态下实现它感到有些困惑。

这是我的示例方法:

getTowerLeaveData_LV: function(dateToday,tower) {
    var arr = LeavesCollection.find($or: [ 
        { leaves_start: { $lte: dateToday } }, 
        { leaves_end: { $gte: dateToday } } ], 
        leaves_approval_status: {$ne: 'Rejected'}}).fetch();

        return arr
},

这是我的样本Mongodb记录

_____________________________________
name   |  leaves_start   | leaves_end
_____________________________________
Junel  | 10/01/2015      | 10/03/2015
_____________________________________
Jaycee | 10/03/2015      | 10/03/2015
_____________________________________
Tori   | 10/05/2015      | 10/10/2015
_____________________________________
Ryan   | 10/02/2015      | 10/05/2015

如果dateToday的值是10/03/2015,那么方法应该返回Junel,Jaycee和Ryan的记录。

我希望这是有道理的。多谢你们!

3 个答案:

答案 0 :(得分:1)

你这样做

MyCollection.find({
  leaves_start: { $lte: new Date },
  leaves_end:   { $gte: new Date }
});

答案 1 :(得分:1)

startDate =  ;// get Start Date from UI Convert it to date format using new Date();
endDate   =  ;// get End Date from UI Convert it to date format using new Date();
MyCollection.find({
  leaves_start: { $lte: endDate},   // start Less and endDate
  leaves_end:   { $gte: startDate } // end greater than StartDate
});

如果startDate和endDate相同,则获得该日期的所有记录,否则它将是日期范围。

答案 2 :(得分:0)

我不确定这是否有用,但这是我提出的代码:

记录 enter image description here

方法:

//monthyear = "10-2015"
//numOfDays = 31

getTowerLeaveData_LV: function(monthyear, numOfDays,tower, userid, username) {
        var selectedMonthYear = monthyear.split("-");
        var tempArr = new Array();
        var reArr = new Array()

        tempArr.push(username)
        reArr.push(username);

        LeavesCollection.find({associate_tower: {$in: tower}, leaves_approval_status: {$ne: 'Rejected'}, user_id: userid},{sort:{leaves_timestamp   :-1}},{fields: {_id:1,user_id:1,associate_id:1, associate_fullname:1,leaves_type:1,leaves_start:1,leaves_end:1, leaves_days:1}}).forEach(
          function(leaver) {
              for(var a=1; a!=numOfDays+1; a++) {
                var dateActive = selectedMonthYear[0] + "/" + a.toString() + "/" + selectedMonthYear[1];
                var res = dateCheck(leaver.leaves_start, leaver.leaves_end,dateActive);
                if(res == true) {
                    tempArr.splice(a, 0,[leaver.leaves_approval_status,leaver.leaves_type,leaver._id,leaver.associate_fullname,a]);
                }
              }
          });

        for(var a=1; a!=numOfDays+1; a++) {
          var temp = findKey(tempArr,a);

          if(temp != false) {
            reArr.push(tempArr[temp]);
          } else {
            reArr.push('null')
          }
        }

        return reArr;

    },

MISC JS功能:

function dateCheck(from,to,check) {

    var fDate,lDate,cDate;
    fDate = Date.parse(from);
    lDate = Date.parse(to);
    cDate = Date.parse(check);

    if((cDate <= lDate && cDate >= fDate)) {
        return true;
    }
    return false;
}



function findKey(array, search) {
  var theIndex = false;
  for (var i = 0; i < array.length; i++) {
    if (array[i].indexOf(search) > -1) {
        theIndex = i;
        break;
    }
  }
  return(theIndex);
}

阵列输出: enter image description here

输出说明:

数组中Name后面的项目等于numOfDays(是日期)的值。如果程序找到“leaves_start”和“leaves_end”之间的匹配日期,它将从mongodb返回数组数据,否则返回“null”。