How to get previous day's records in MongodDB?

Viewed 918

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.

4 Answers

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

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())

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)

},
var date = new Date();
date ; //# => today date
        
var yesterdayDate =  date.setDate(date.getDate() - 1);
        
createdTime: {
    $lt: date,
    $gt: yesterdayDate,
}
Related