我正在尝试使用" date" startDate和endDate之间的字段。
我正在查询数据库(从月初到今天获取记录):
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){
}
记录日期为10/02至10/07并被退回,但未返回日期为10/01的记录。这是缺失记录的日期字段:
"date": {
"$date": "2017-10-01T23:00:00.000Z"
}
我将小时设置为23,以确定它是否会产生影响(时区等),但它没有。
如果我将startDate设置为9月30日23小时,则没有。 22,21小时,没什么。 当startDate变为9月30日,小时20,宾果游戏时,会返回记录。
这可能是一个时区问题,但我无法确定何时何地。
答案 0 :(得分:2)
此2017-10-01T23:00:00.000Z
是GMT时间。
这new Date(2017,10,01);
是您当地的时间,一旦您不坐在格林威治子午线上,就不等于上述时间。
自某个基准日期起,JS以GMT秒为单位存储日期。
因此,在第一种情况下,秒数为X
,在第二种情况下为X + Date.getTimezoneOffset()
。
您可以使用此功能:
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); `