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); `