Прибавление к дате в datetimelocal определённое количество дней и к времени определённое количество часов через JS
У меня есть два объекта <input type="datetime-local" name="startofvalidityperiod" class="form form-control form-control-lg" required="" id="id_startofvalidityperiod"> и <input type="datetime-local" name="expirationdate" class="form-control form-control-lg form" readonly="0" id="id_expirationdate">. В скрипте JS у меня есть событие, которое отслеживает выбор даты в первом объекте
window.onload = function() {
let date = document.getElementById('id_startofvalidityperiod');
date.addEventListener('change', function(event) {
alert(date);
});
}
Мне необходимо к дате, которая выбрана в первом объекте прибавить определённое количество дней, а ко времени прибавить определённое количество часов
Ответы (1 шт):
Воспользуйтесь автоисправлением даты.
В объект Date можно установить (set) 32 число, и внутренний парсер сам сдвинет месяц на следующий, а число на 1ое или 2ое или 4(февраль) или 3 (февраль високосного года)
const datePlusDays = (date, days) => {
let newDate = new Date(date);
const curDateNum = date.getDate();
newDate.setDate(curDateNum + Number(days));
return newDate;
};
const datePlusHours = (date, hours) => {
let newDate = new Date(date);
const curHoursNum = date.getHours();
newDate.setHours(curHoursNum + hours(days));
return newDate;
}
const datePlusDaysAndHours = (date, days, hours) => {
let newDate = new Date(date);
newDate = datePlusDays(newDate, days);
newDate = datePlusHours(newDate, hours);
return newDate;
}
не сокращайте код! попытки сделать это в стиле return date.setDate(date.getDate()+days) приведут к выдаче timestamp (количество микросекунд), а вам нужен нормальный объект даты.
Справочная информация: