Даты в течение 10 месяцев - PullRequest
0 голосов
/ 14 мая 2019

Я хочу отсортировать объекты, содержащие дату. Я хочу только объекты, дата которых составляет 10 или менее месяцев от сегодняшней даты.

Пример

const dates = [new Date('2019/05/20'), new Date('2019/08/03'), new Date('2020/03/20')]

В этом примере я не заинтересован в последнем элементе, так как до него более 10 месяцев. Говоря

dates.forEach(e => {
  if (new Date().getMonth() + 10 < e.getMonth() {
    console.log('less than 10 months');
  }
}

Конечно, это не сработает, так как максимальный месяц - 12. Это был просто пример.

Любая идея, как я могу решить эту проблему, с датами лет?

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Попробуйте использовать setMonth для расчета точной будущей даты:

const targetDate = new Date();
targetDate.setMonth(targetDate.getMonth() + 10);

dates.forEach(e => {
  if (targetDate < e) {
    console.log('less than 10 months');
  }
}

Обратите внимание, что если вы используете библиотеку типа moment.js, вы можете сделать что-то вроде этого:

const targetDate = moment().add(10, 'M');
dates.forEach(e => {
  if (mement(e).isBefore(targetDate)) {
    console.log('less than 10 months');
  }
}
0 голосов
/ 14 мая 2019

IIUC: Вы можете вычислить разницу (в месяцах) между двумя датами:

function monthDiff(date1, date2) {
    var months;
    months = (date2.getFullYear() - date1.getFullYear()) * 12;
    months -= date1.getMonth() + 1;
    months += date2.getMonth();
    return months <= 0 ? 0 : months;
}

И затем проверить, если результат меньше или равен 10, используя ваш forEach, или вы можете использовать массив.фильтр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...