我正在尝试获取开始日期和结束日期之间带有“日期”字段的所有记录。
我正在用这个查询数据库(以获取从月初到今天的记录):
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 点时,宾果,将返回记录。
这可能是时区问题,但我无法确定在哪里以及如何进行。
最佳答案
此 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); `
关于javascript - 按日期过滤时Mongodb时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46625758/