Такого функционала нет, вы должны собрать его самостоятельно.
Сначала я генерирую из вашей строки JS -date. Из этого я извлекаю год, месяц и день.
Затем я суммирую дополнительные месяцы и получаю месяц по модулю 12 (месяцы в JS считаются 0-11). Если месяцы отрицательные, я добавляю 12 месяцев. Для года я добавляю целую часть от monthSum didide до 12.
Если день больше или равен 29, и это февраль и это високосный год (год по модулю 4 равен 0), то для дня устанавливается значение 29. Во всех остальных случаях случаях, день устанавливается на минимум привилегированного дня и максимум дней в этом месяце (хранится в массиве MONTH).
Теперь у меня есть желаемая дата, и я только форматирую ее для возврата: для получения дня с 2- di git добавить перед строкой «0», а затем взять последние 2 символа. Для сокращения месяца я использую массив MONTH.
Попробуйте. Я даю вам несколько важных примеров с високосным днем и с отрицательными / положительными месяцами, которые приводят к смене года.
function edate(dateString, monthExtra) {
const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const MONTH = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
let date = new Date(dateString);
let year= -date.getFullYear();
let month = date.getMonth();
let day = date.getDate();
let monthSum = month + monthExtra;
month = monthSum %12;
if (month < 0) {
month = 12 + month;
}
year = year + Math.floor(monthSum/12);
if ( day>=29 && month==1 && (year %4 == 0 )) {
day = 29;
} else {
day = Math.min(day, DAYS[month]);
}
return ("0" + day).slice(-2) + '-' + MONTH[month] + '-' + year;
}
console.log(edate('06-Aug-2020', 13));
console.log(edate('30-Jan-2020', -13));
console.log(edate('30-Jan-2019', 1));
console.log(edate('29-Mar-2020', -13));