2016-04-16 2 views
2

Я пытаюсь вернуть результаты поиска для каждого документа, который был создан за день. Ниже приведен запрос, который я использую.Запрос по дате не работает

var query = Document.find({}).populate('contacts'); 
var gte = moment(req.query.date, 'DD-MM-YYYY').startOf('Day'); 
var lte = moment(req.query.date, 'DD-MM-YYYY').endOf('Day'); 
query.where('dates.createdAt').gte(gte).lt(lte); 

Этот запрос работает в течение нескольких дней, но не для всех. Кажется, я не понимаю этого поведения. Пожалуйста, помогите.

Формат даты в строке запроса: DD/MM/YYYY.

Работы для: 2016-04-16T00:02:30.065Z Не работает: 2016-04-15T19:02:59.758Z

ответ

2

Это неправильно, потому что вы не инициализировать, как .utc() и даты MongoDB сохраняются в формате UTC:

var gte = moment.utc(req.query.date, 'DD-MM-YYYY'); 
var lte = moment.utc(req.query.date, 'DD-MM-YYYY').endOf('Day'); 

И нет никакой необходимости для startOf().

Если вы так не строите, то итоговый объект Date будет искажен разницей в локальном часовом поясе. Следовательно, почему вы не видите выбор, работающий там, где часы будут пересекать даты.

Также, если даты вступают как 01/01/2016, тогда строка формата будет 'DD/MM/YYYY', но одна или другая, вероятно, опечатка в вашем вопросе.

Смежные вопросы