Как рассчитать "месяц назад"?

Рейтинг: 0Ответов: 0Опубликовано: 31.05.2023

Пытаюсь сделать интервал дат для подписок. Подскажите пожалуйста как рассчитать дату "месяц назад".

На странице будет выглядеть примерно так: 05 Мая 2023 — 05 Июня 2023

Дано:

  1. Юзер покупает подписку. На бэке фиксируется дата создания подписки и больше никогда не меняется.
  2. С бэка приходит следующая дата когда юзеру будут начислены кредиты.
  3. Необходимо получить предыдущую дату которая "месяц назад" от следующей даты.

Например:

  • Юзер купил подписку 05 мая, следующие кредиты будут начислены 05 июня. Функция должна вернуть 05 мая.
  • Юзер купил подписку 31 мая, следующие кредиты будут начислены юзеру 30 июня. Функция должна вернуть 31 мая.

Я пробовал сделать так, но мне приходит некорректная дата в сценарии с 31 числом.

const startDate = "2023-05-31T10:16:14+00:00";
    
const getDateMonthsAgo = (nextDate, months) => {
  const date = new Date(nextDate);
  const dateMonthsAgoUnix = date.setMonth(date.getMonth() - months);

  return new Date(dateMonthsAgoUnix);
};


// правильно ожидаю 05 мая.
console.log( getDateMonthsAgo("2023-06-05T15:29:11.839585+00:00", 1) ); 
// Ожидаю 31 мая, а получаю 30 мая.
console.log( getDateMonthsAgo("2023-06-30T15:29:11.839585+00:00", 1) ); 
console.log( getDateMonthsAgo("2023-07-31T15:29:11.839585+00:00", 1) );
console.log( getDateMonthsAgo("2023-08-31T15:29:11.839585+00:00", 1) );

Ответы

Ответов пока нет.