I am using MongoDB which has a time field in milliseconds. I am trying to get all the records for previous day. So far I have searched for solutions which show how to get the records for previous 24 hrs. But I need records for previous day only. Please help to write this query. So something like this
createdTime: {
$lt: new Date().getTime(),
$gt: new Date().getTime() - 1000 * 60 * 60 * 24,
},
But like I explained this is not what I want.
CodePudding user response:
You can get the UNIX timestamps for start and end of previous day this way.
NOTE - start and end in UTC time
var start = new Date().setUTCHours(0,0,0,0)-1000 * 60 * 60 * 24;
var end = new Date().setUTCHours(23,59,59,999)-1000 * 60 * 60 * 24;
console.log(start)
console.log(end)
console.log(new Date(start).toUTCString())
console.log(new Date(end).toUTCString())
CodePudding user response:
We would assume "the previous day" is a 24 hour period starting at the beginning of the day before today. The easiest way to do this is use time based on UTC and add a timezone offset (if needed).
const timeZoneOffset = -5;
createdTime: {
$gt: new Date().setUTCHours(0,0,0)-1000 * 60 * 60 * (24 timeZoneOffset),
$lt: new Date().setUTCHours(23,59,59,999)-1000 * 60 * 60 * (24 timeZoneOffset)
},
CodePudding user response:
Whenever you have to work with date/time arithmetic then I recommend moment.js library:
createdTime: {
$lt: moment().endOf('day').subtract(1, 'day').toDate(),
$gte: moment().startOf('day').subtract(1, 'day').toDate()
},
Alternative libraries are luxon and day.js
CodePudding user response:
var date = new Date();
date ; //# => today date
var yesterdayDate = date.setDate(date.getDate() - 1);
createdTime: {
$lt: date,
$gt: yesterdayDate,
},