Я создал тему еще в мае 2018 года о необходимости помощи, чтобы добавить 2 текстовых поля, которые будут действовать как инструмент «диапазон дат» для Fullcalendar. Позволяет мне вводить даты «От» и «До», фильтруя события, чтобы показывать только события между этими двумя датами.
Вот ссылка на эту тему:
Изменить диапазон дат для отображения событий в FullCalendar
Работает нормально, за исключением того, что я обнаружил, что если я попытаюсь вставить дату с 2018 года в поле «От» и дату с 2019 года в поле «До», она не будет работать и будет отображать только данные из 2018. Как будто функция диапазона дат была закодирована таким образом, чтобы не позволить пользователю пройти текущий год.
Для тех, кто не читал старую тему об этом, вот функция «Фильтр диапазона дат», которую я использую:
function filterByDateRange(start_date, end_date, format) {
var s = $.fullCalendar.moment(start_date),
e = $.fullCalendar.moment(end_date),
v = $('#calendar').fullCalendar('getView'),
a, b;
// Start date is invalid; set it to the start of the month.
if (! s.isValid()) {
b = e.isValid();
s = b ? e.clone() : $.fullCalendar.moment();
s.date(1);
$('#start_date').val(s.format(format));
a = true;
}
// End date is invalid; set it to the end of the month.
if (! e.isValid()) {
b = s.isValid();
e = b ? s.clone() : $.fullCalendar.moment();
e.date(e.daysInMonth());
$('#end_date').val(e.format(format));
a = true;
}
// Start date is after end date; set it to a day before the end date.
if (s.isAfter(e)) {
s = e.clone().add('-1', 'day');
$('#start_date').val(s.format(format));
// End date is before start date; set it to a day after the start date.
} else if (e.isBefore(s)) {
e = s.clone().add('1', 'day');
$('#end_date').val(e.format(format));
}
// Add 1 day so that `end_date` is inclusive.
e = e.isValid() ? e.add('1', 'day') : e;
$('#calendar').fullCalendar('option', 'validRange', {
start: s.isValid() ? s : null,
end: e.isValid() ? e : null
});
a = a || s.isSame(e, 'month');
// If months are different, switch to the year list.
if ('listYear' !== v.name && ! a) {
$('#calendar').fullCalendar('changeView', 'listYear');
// Otherwise, switch back to month list, if needed.
} else if ('listMonth' !== v.name) {
$('#calendar').fullCalendar('changeView', 'listMonth');
}
}
$('#start_date').on('change', function(){
filterByDateRange(this.value, $('#end_date').val(), 'YYYY-MM-DD');
});
$('#end_date').on('change', function(){
filterByDateRange($('#start_date').val(), this.value, 'YYYY-MM-DD');
});
Я думаю, что проблема в том, что он использует представление «listYear» в коде и может отображать события только за текущий год, но не может отображать список с несколькими годами. Мне нужно, чтобы он отображал «список» с событиями, которые соответствуют выбранному диапазону дат.
Любая помощь будет принята с благодарностью. Большое спасибо!