Описание проблемы
У меня есть форма с двумя полями “Дата начала” и “Дата окончания”, оба используют виджет jQuery Datepicker. Эти поля выбираются пользователем и показывают начальную и конечную даты отчета. Также есть параметр “Диапазон дней” - это максимальное количество дней между этими датами.
Когда пользователь меняет дату в одном поле, я пересчитываю параметры “minDate” и “maxDate” для виджета Datepicker в другом поле. Это ограничивает варианты выбора для пользователя. Для этих расчетов нужно прибавлять и вычитать дни от даты.
Суть проблемы
Вычитание дней работает правильно, а прибавление дней дает неверные результаты. Я использую функцию setDate(), как советуют в примерах:
resultDate.setDate(resultDate.getDate() + 7);
Вот примеры того, что происходит (формат даты ДД/ММ/ГГГГ):
01/01/2025 + 0 дней = 10/01/2025 = +9 дней = Неверно
01/01/2025 + 1 день = 11/01/2025 = +10 дней = Неверно
01/01/2025 + 9 дней = 19/01/2025 = +18 дней = Неверно
01/01/2025 + 10 дней = 20/04/2025 = +109 дней = Неверно
01/01/2025 - 0 дней = 01/01/2025 = -0 дней = Верно
01/01/2025 - 1 день = 31/12/2024 = -1 день = Верно
01/01/2025 - 9 дней = 23/12/2024 = -9 дней = Верно
01/01/2025 - 10 дней = 22/12/2024 = -10 дней = Верно
Пример кода
var formatDate = "dd/mm/yy";
$(document).ready(function() {
$("#PlusBtn").click(function() {
var currentDate = $.datepicker.parseDate(
formatDate,
document.getElementById("StartDate").value
);
var dayCount = document.getElementById("DaysRange").value;
currentDate = increaseDays(currentDate, dayCount);
var finalDate = $.datepicker.formatDate(formatDate, currentDate);
document.getElementById("FinalDate").value = finalDate;
});
$("#MinusBtn").click(function() {
var currentDate = $.datepicker.parseDate(
formatDate,
document.getElementById("StartDate").value
);
var dayCount = document.getElementById("DaysRange").value;
currentDate = decreaseDays(currentDate, dayCount);
var finalDate = $.datepicker.formatDate(formatDate, currentDate);
document.getElementById("FinalDate").value = finalDate;
});
});
var dateField = $("#StartDate").datepicker({
changeYear: true,
changeMonth: true,
dateFormat: formatDate,
});
function increaseDays(date, days) {
const resultDate = new Date(date);
resultDate.setDate(resultDate.getDate() + days);
return resultDate;
}
function decreaseDays(date, days) {
const resultDate = new Date(date);
resultDate.setDate(resultDate.getDate() - days);
return resultDate;
}
<p>Дни: <input type="text" value="10" id="DaysRange" /></p>
<p>Дата: <input type="text" id="StartDate" autocomplete="off" /></p>
<input type="button" value="Прибавить дни" id="PlusBtn" />
<input type="button" value="Вычесть дни" id="MinusBtn" />
<p>Результат: <input type="text" id="FinalDate" value="" disabled /></p>
В чем может быть проблема с прибавлением дней?