Привет, мне нужна помощь с настройкой функции dateAgo. Что он делает, так это то, что он дает мне коллекцию дат с даты, прошедшей обратный отсчет, но моя проблема с моей функцией заключается в том, что она не показывает правильно 3-ю дату, она должна быть 17 вместо 16, может кто-нибудь увидеть, знают ли они, почему это такое случается
Date.prototype.datesAgo = function(num) {
let date = this;
let arr = [];
for(let i = 0; i < num; i++) {
arr.push(i.toString());
}
let days = arr.slice(0, num).join(' ');
console.info(days)
return days.split(' ').map(function(n) {
date.setDate(date.getDate() - n);
return (function(year, month, day) {
return [year, month < 10 ? '0'+ month : month, day < 10 ? '0' + day : day].join('-');
})(date.getFullYear(), date.getMonth(), date.getDate());
}).join(',');
}
console.info(new Date('2018-05-19').datesAgo(3))


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


На каждой итерации вы изменяете исходный объект date:
date.setDate(date.getDate() - n);
Итак, на каждой последующей итерации вы вычитаете n из последняя итерацияdate, а не исходную дату. Вместо этого клонируйте исходный объект даты на каждой итерации:
Date.prototype.datesAgo = function(num) {
const date = this;
const dateStrs = Array.from({ length: num }, (_, i) => {
const clonedDate = new Date(date.getTime());
clonedDate.setDate(date.getDate() - i);
return (function(year, month, day) {
return [year, month < 10 ? '0' + month : month, day < 10 ? '0' + day : day].join('-');
})(clonedDate.getFullYear(), clonedDate.getMonth(), clonedDate.getDate());
});
return dateStrs.join(',');
}
console.info(new Date('2018-05-19').datesAgo(3))
Спасибо за вашу помощь, очень ценим