Mongodb는 날짜 오브젝트를 UTC로 저장합니다. 나는 "오늘"을 기반으로 클라이언트가 입력 한 작업을 쿼리해야합니다. 오늘은 동양 표준 시간대 또는 태평양에있을 수있는 사용자 관점에서 다릅니다. 다음은 내가 만난 문제입니다 :클라이언트 날짜를 기반으로 mongodb 날짜 쿼리
레코드는 "2017-05-10 15 : 15 : 11.283Z"로 입력됩니다. 나중에 밤에 서버에 쿼리하면 서버 날짜는 이미 2017-05-11이지만 클라이언트의 관점에서 볼 때 여전히 2015-05-10입니다.
클라이언트가 "오늘"입력 한 모든 작업을 찾아야합니다.
나는이 시도 :let start = new Date();
start.setHours(0,0,0,0);
let end = new Date();
end.setHours(23,59,59,999);
을하지만 그 날 (같은 날) 동안 작동하는 동안,이 때 클라이언트 쿼리 밤,하지만 자정 전에 레코드를 표시하지 않습니다. 아래의 의견과 내 자신의 브레인 스토밍을 바탕으로
, 지금과 같이 서버에 클라이언트 날짜를 전달하고 UTC로 변환 :let clientDate = req.params.month +'/'+ req.params.date +'/'+ req.params.year; //'5/10/2017'
console.log('clientDate ' + clientDate);
let start = new Date(clientDate);
start.setHours(0,0,0,0);
start = convertDateToUTC(start);
let end = new Date(clientDate);
end.setDate(end.getDate() + 1); //need this, otherwise queries next day
end.setHours(0,0,0,0);
end = convertDateToUTC(end);
console.log('start ' + start +' end ' + end);
return Taks.find({goalId: {$in: goalIds}, createdAt: {$gte: start, $lt: end}}).lean() //only today
//using function found on stack overflow
function convertDateToUTC(date) {
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
가 제대로 작동, 그냥 해커가 서버에 클라이언트 날짜를 제공하는 것 같습니다.
당신은 클라이언트 timezone을 전달해야하며 쿼리를 고려해야합니다. –
UTC로 변환하고 있습니까 ?? – thedarkcoder