The departure must be at list one day after the arrival, but no longer than seven, due to campground’s policy.
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
function updateDepartureDate(arrivalDateField) {
|
|
const arrivalDate = new Date(arrivalDateField.value);
|
|
if (isNaN(arrivalDate)) {
|
|
return;
|
|
}
|
|
const departureDateField = document.querySelector('[name="departure_date"]');
|
|
if (!departureDateField) {
|
|
return;
|
|
}
|
|
|
|
arrivalDate.setUTCDate(arrivalDate.getUTCDate() + 1);
|
|
const minDate = formatDate(arrivalDate);
|
|
|
|
departureDateField.setAttribute('min', minDate);
|
|
const departureDate = new Date(departureDateField.value);
|
|
if (isNaN(departureDate) || departureDate < arrivalDate) {
|
|
departureDateField.value = minDate;
|
|
}
|
|
|
|
arrivalDate.setUTCDate(arrivalDate.getUTCDate() + 6);
|
|
const maxDate = formatDate(arrivalDate);
|
|
departureDateField.setAttribute('max', maxDate);
|
|
if (!isNaN(departureDate) && departureDate >= arrivalDate) {
|
|
departureDateField.value = maxDate;
|
|
}
|
|
}
|
|
|
|
function formatDate(date) {
|
|
return `${date.getFullYear()}-${zeroPad(date.getMonth() + 1)}-${zeroPad(date.getDate())}`;
|
|
}
|
|
|
|
function zeroPad(num) {
|
|
return `${num < 10 ? '0' : ''}${num}`
|
|
}
|
|
|
|
const arrivalDateField = document.querySelector('[name="arrival_date"]');
|
|
if (!arrivalDateField) {
|
|
return;
|
|
}
|
|
arrivalDateField.addEventListener('change', function (event) {
|
|
updateDepartureDate(event.target);
|
|
});
|
|
|
|
updateDepartureDate(arrivalDateField);
|
|
})();
|