How Can I Filter an Array of Objects Between Two Dates?

How Can I Filter an Array of Objects Between Two Dates?

Aside from the occasional jQuery selectors and element modifications, I'm not too great at javascript. For a problem I'm having, I need to filter out a javascript object by date. I have a structure that looks like this:

Object { version: "3.1.1", released_on: "2016-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 }

I want to find all of the objects from 10 years so between "2016-08-21T00:00:00.000Z" and "2010-08-21T00:00:00.000Z" The problem I'm experiencing is that the released_on: field is a string not a date. Would I need to create a new Date() object convert it into a string, and then use .filter or would I do the opposite, convert the string into a date and then filter. Has anyone tried something like this before?

2

2 Answers

You might do as follows;

var data = [{ version: "3.1.1", released_on: "2016-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2011-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2009-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2006-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2013-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2017-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2015-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
           ],
      ed = new Date("2016-08-21T00:00:00.000Z").getTime(),
      sd = new Date("2010-08-21T00:00:00.000Z").getTime(),
  result = data.filter(d => {var time = new Date(d.released_on).getTime();
                             return (sd < time && time < ed);
                            });
console.log(result);
export const filterBetweenDates = (data, setState, fromDate, toDate) => {
  try {
    setState(data.filter(({ date }) => date >= fromDate && date <= toDate));
  } catch (error) {
    console.log('error while filtering by dates', error.message);
  }
};
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Alexander Ross
Author

Alexander Ross

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.