我在one服务器上使用Node.js和Express查询dbserver上的MongoDB,遇到了让日期一起工作的问题,我在这里阅读了很多关于这个问题的线程,最突出的是这个问题:
我很确定我明白我应该做什么,但我尝试的一切似乎都没有用。
在我的.js文件中,我有以下内容:
var todayStart = new Date();
todayStart.setSeconds(0);
todayStart.setHours(0);
todayStart.setMinutes(0);
todayStart.setMilliseconds(0);
var todayEnd = new Date(todayStart);
todayEnd.setHours(23);
todayEnd.setMinutes(59);
todayEnd.setSeconds(59);
todayEnd.setMilliseconds(999);
var query = {
"date": {
$gte: new Date(todayStart).toISOString(),
$lte: new Date(todayEnd).toISOString()
}
};
我的查询var以我期望的格式输出到控制台:
{ date:
{ '$gte': '2016-09-13T00:00:00.000Z',
'$lte': '2016-09-13T23:59:59.999Z' }
}
我尝试使用我的查询变量或日期值本身,并且都返回null的结果(没有错误):
db.collection('test').findOne(query, function(err, result) {
db.collection('test').findOne({"date" : {$gte: new Date(todayStart).toISOString(),$lte: new Date(todayEnd).toISOString() }}, function(err, result) {
但是,如果像这样插入我的约会日期,它会返回我的结果:
db.collection('test').findOne({"date" : {$gte: new Date("2016-09-13T00:00:00.000Z"),$lte: new Date("2016-09-13T23:59:59.999Z") }}, function(err, result) {
知道我在这里错过了什么吗?
发布于 2016-09-13 12:50:17
不需要将日期转换为ISO字符串格式,只需使用JS日期进行查询。有关原因的详细解释,请参阅文档。
开始日期对象应该在00:00:00.000 (毫秒精度)保存当前日期时间小时,并将今天日期的小时设置为23:59:59.999,设置为结束日期变量:
var todayStart = new Date();
todayStart.setHours(0,0,0,0);
var todayEnd = new Date();
todayEnd.setHours(23,59,59,999);
var query = {
"date": {
$gte: todayStart,
$lte: todayEnd
}
};
db.collection('test').findOne(query, function(err, result) {
if (err) throw new Error();
console.log(JSON.stringify(result));
});
如果您使用的是动量库,可以通过在当前date对象上使用startOf()和endOf()方法,将字符串'day‘作为参数传递:
var todayStart = moment().startOf('day'); // set to 12:00 am today
var todayEnd = moment().endOf('day'); // set to 23:59 pm today
https://stackoverflow.com/questions/39470285
复制相似问题