Чтобы выбрать диапазон дат, я использую плагин Jquery UI Datepicker.Я использую код, который показывает количество дней при выборе периода.
Для подключения плагина я использую CDN:
<script type="text/javascript" src='https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js'></script>
<script type="text/javascript" src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js'></script>
<link rel="stylesheet" type="text/css" href="https://jquery-ui-bootstrap.github.io/jquery-ui-bootstrap/css/custom-theme/jquery-ui-1.10.3.custom.css"></link>
HTML Code:
<div>
<h3>From:</h3>
<input id="from" type="text" name="from" readonly />
</div>
<div>
<h3>To:</h3>
<input id="to" type="text" name="to" readonly />
</div>
<div>
<span>You have chosen:</span>
<span id="days"></span> days.
</div>
Инициализация плагина:
var from = new Date();
var to = new Date();
var dayDiff = 1;
$(function() {
var dates = $("#from, #to").datepicker({
defaultDate: "+1w",
changeMonth: true,
numberOfMonths: 1,
dateFormat: "dd.mm.yy",
minDate: 0,
maxDate: 14,
onSelect: function(selectedDate) {
var option = this.id == "from" ? "minDate" : "maxDate",
instance = $(this).data("datepicker"),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
selectedDate, instance.settings);
dates.not(this).datepicker("option", option, date);
if (this.id == "from") {
from = $(this).datepicker('getDate');
if (!(to == "")) {
update_days()
}
}
if (this.id == "to") {
to = $(this).datepicker('getDate');
update_days()
}
}
});
});
function update_days() {
dayDiff = Math.ceil((to - from) / (1000 * 60 * 60 * 24));
$("#days").empty()
$("#days").append(dayDiff)
}
Как сделать динамический выбор дней?
Например, пользователь нажал 1 апреля.Показывает только 14 дней, которые он может выбрать.Если пользователь нажал 7 апреля, он также показывает 14 дней, которые можно выбрать.
В обоих случаях это minDate: 0 и maxDate: 14,
Я нашел похожееКод, только здесь он запрещает выделение следующих 7 дней:
let counter = 0;
let selected;
const calendar = $("#datepicker").datepicker({
range: true,
toggleSelected: false,
multipleDatesSeparator: " - ",
multipleDates: false,
onSelect: function(formattedDate, date, inst) {
selected = date;
// console.log(selected[0])
},
// onRenderCell: function(date, cellType) {
// if (selected) {
// const difference = Math.ceil((date - selected[0]) / 1000 / 3600 / 24);
// console.log(difference)
// if (difference < 7 && difference > -7) {
// return {
// disabled: true
// }
// }
// }
// }
}).data('datepicker');
const test = function(date, cellType) {
if (selected) {
const difference = Math.ceil((date - selected[0]) / 1000 / 3600 / 24);
console.log(difference)
if (difference < 7 && difference > -7) {
return {
disabled: true
}
}
}
}
calendar.update('onRenderCell', test)
Нужна ваша помощь!Спасибо!