Как рассчитать "месяц назад"?
Пытаюсь сделать интервал дат для подписок. Подскажите пожалуйста как рассчитать дату "месяц назад".
На странице будет выглядеть примерно так:
05 Мая 2023 — 05 Июня 2023
Дано:
- Юзер покупает подписку. На бэке фиксируется дата создания подписки и больше никогда не меняется.
- С бэка приходит следующая дата когда юзеру будут начислены кредиты.
- Необходимо получить предыдущую дату которая "месяц назад" от следующей даты.
Например:
- Юзер купил подписку 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) );
Источник: Stack Overflow на русском