Mongodb时区问题,按date过滤

我正在尝试使用startDate和endDate之间的“date”字段获取所有logging。

我用这个查询数据库(从月初到今天的logging):

var startDate = new Date(2017,09,1); var endDate = new Date(2017,09,7); //console.log(startDate) = Sun Oct 01 2017 00:00:00 GMT-0300 (BRT) //console.log(endDate) = Sat Oct 07 2017 00:00:00 GMT-0300 (BRT) Sale.find({date:{"$gte":startDate,"$lt":endDate}},function(err, sales){ } 

loggingdate在10/02和10/07之间,并被退回,但是10/01date的logging没有被退回。 以下是这些缺失logging的date字段:

  "date": { "$date": "2017-10-01T23:00:00.000Z" } 

我把时间设定为23,看看它是否会有所作为(时区等),但没有。

如果我把startDate设置为9月30日23小时,什么都没有。 22时21分,什么也没有。 当startDate变成9月30日,小时20,宾果时,logging被返回。

这可能是一个时区问题,但我无法确定在哪里以及如何。

2017-10-01T23:00:00.000Z是GMT时间。 这个new Date(2017,10,01); 是你当地的时间,只要你不坐在格林威治子午线上,就不等于上述时间。

JS以某个基准date之后的GMT秒数存储date。

所以在第一种情况下,秒数是X ,第二种情况是X + Date.getTimezoneOffset()

你可以使用这个function:

 function ZDate(year,month,day) { return new Date(year + "-" + month + "-" + day); } 

或者像RobG所说:

 function ZDate(year,month,day) { return Date.UTC(year, month-1, day); } 

这里:

 var startDate = ZDate(2017,09,1); var endDate = ZDate(2017,09,7); `