Прибавление к дате в 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 шт):

Автор решения: DraKoan

Воспользуйтесь автоисправлением даты. В объект 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 (количество микросекунд), а вам нужен нормальный объект даты.

Справочная информация:

  1. Учебник
  2. MDN
  3. Стандарт ECMA-262.11
→ Ссылка