Учитывая формат даты ГГГГ-ММ-ДД, значения будут сортироваться и сравниваться лексически. Итак, сначала найдите последний месяц, затем отфильтруйте даты в этом месяце, например,
let data = [
{a:'a', date:'2020-02-12'},
{a:'a', date:'2019-12-13'},
{a:'a', date:'2019-04-28'},
{a:'a', date:'2019-12-15'},
{a:'a', date:'2020-02-28'},
{a:'a', date:'2018-12-13'}];
// Get last date
let last = data.map(obj => obj.date).sort()[data.length-1];
console.log(last);
// Get objects in last month
let lastMonthsValues = data.filter(
obj => obj.date.substr(0,7) == last.substr(0,7)
);
// Last month's objects
console.log(lastMonthsValues);
Вы можете сделать то же самое, используя объекты Date, но для этого сначала необходимо выполнить синтаксический анализ Date, а затем сравнить date.getUTCFullYear()
и date.getUTCMonth()
вместо простых строковых операций.
let data = [
{a:'a', date:'2020-02-12'},
{a:'a', date:'2019-12-13'},
{a:'a', date:'2019-04-28'},
{a:'a', date:'2019-12-15'},
{a:'a', date:'2020-02-28'},
{a:'a', date:'2018-12-13'}];
// Get last date
let last = data.map(obj => obj.date).sort((a, b) => new Date(a) - new Date(b))[data.length-1];
console.log(last);
// Get objects in last month
let lastMonthsValues = data.filter(obj => {
let d0 = new Date(last);
let d1 = new Date(obj.date);
return d1.getUTCFullYear() == d0.getUTCFullYear() &&
d1.getUTCMonth() == d0.getUTCMonth();
}
);
// Last month's objects
console.log(lastMonthsValues);
Использование строковых методов намного меньше кода и, вероятно, намного эффективнее.