Given an array object, filter the array to return the last 12 months of data.
Example 1: today is May 2021, so the returned data date range is in between June 2020 until May 2021.
Example 2: for year 2016, the returned data date range is in between June 2015 until May 2016.
var observations = [
{gameScore: "1", reportDate: "2021-09-09"},
{gameScore: "1", reportDate: "2021-05-09"},
{gameScore: "1", reportDate: "2020-06-09"},
{gameScore: "1", reportDate: "2020-04-09"},
{gameScore: "1", reportDate: "2019-08-09"},
{gameScore: "1", reportDate: "2019-03-09"},
];
//example 1
const example1Result = _.filter(observations, o=> moment()
.add(-12, "months")
.isSameOrBefore(moment(o.reportDate)));
console.log(example1Result);
//example 2
const example2Result = _.filter(observations, o=> !moment()
.add(-1, "year")
.isAfter(moment(o.reportDate)));
console.log(example2Result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
However, it returns June-December 2021, which in this case, it shouldn't. Not sure how to achieve the Example 2?
Fiddle: https://jsfiddle.net/y912drhm/
You can you se isBetween method of moment (and use .subtract()
in alternative to .add(-12 ..)
)
let result = observations.filter(o => moment(o.reportDate, 'YYYY-MM-DD').isBetween(moment().subtract(12, 'months'), moment(), undefined, '[]'));
The [
like fourth parametes is just for include([
or ]
) or exclude((
or )
) the dates used for limit for range. [Here the documentation][1]
var observations = [
{gameScore: "1", reportDate: "2021-09-09"},
{gameScore: "1", reportDate: "2021-05-09"},
{gameScore: "1", reportDate: "2020-06-09"},
{gameScore: "1", reportDate: "2020-04-09"},
{gameScore: "1", reportDate: "2019-08-09"},
{gameScore: "1", reportDate: "2019-03-09"},
];
result = observations.filter(o => moment(o.reportDate, 'YYYY-MM-DD').isBetween(moment().subtract(12, 'months'), moment(), '[]'));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
[1]: https://momentjs.com/docs/#/query/is-between/
var example1 = [
{gameScore: "1", reportDate: "2021-09-09"},
{gameScore: "1", reportDate: "2021-05-09"},
{gameScore: "1", reportDate: "2021-04-09"},
{gameScore: "1", reportDate: "2020-08-09"},
{gameScore: "1", reportDate: "2020-06-09"},
{gameScore: "1", reportDate: "2020-04-09"},
{gameScore: "1", reportDate: "2019-08-09"},
{gameScore: "1", reportDate: "2019-03-09"},
];
var example2 = [
{gameScore: "1", reportDate: "2016-09-09"},
{gameScore: "1", reportDate: "2016-05-09"},
{gameScore: "1", reportDate: "2016-04-09"},
{gameScore: "1", reportDate: "2015-08-09"},
{gameScore: "1", reportDate: "2015-06-09"},
{gameScore: "1", reportDate: "2015-04-09"},
{gameScore: "1", reportDate: "2014-08-09"},
{gameScore: "1", reportDate: "2014-03-09"},
];
let referenceYear = 2016
let result = example1.filter(o => moment(o.reportDate, 'YYYY-MM-DD').isBetween(moment().subtract(12, 'months'), moment(), '[]'));
console.log(result);
let result2 = example2.filter(o => moment(o.reportDate, 'YYYY-MM-DD').isBetween(moment(new Date(new Date().setFullYear(referenceYear-1))), moment(new Date(new Date().setFullYear(referenceYear))), '[]'));
console.log(result2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>