Customer told us that the minimum number of nights is per campsite type, not per season. And he wants this, along with the maximum number of nights, in order to limit the range of departure dates that guests can choose when booking.
53 lines
1.8 KiB
JavaScript
53 lines
1.8 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;
|
|
}
|
|
|
|
const minNights = Math.max(1, parseInt(departureDateField.dataset.minNights, 10));
|
|
arrivalDate.setUTCDate(arrivalDate.getUTCDate() + minNights);
|
|
const minDate = formatDate(arrivalDate);
|
|
|
|
departureDateField.setAttribute('min', minDate);
|
|
const departureDate = new Date(departureDateField.value);
|
|
if (isNaN(departureDate) || departureDate < arrivalDate) {
|
|
departureDateField.value = minDate;
|
|
}
|
|
|
|
const maxNights = parseInt(departureDateField.dataset.maxNights, 10);
|
|
if (maxNights > 0) {
|
|
arrivalDate.setUTCDate(arrivalDate.getUTCDate() + maxNights - minNights);
|
|
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);
|
|
})();
|