Диапазон дат в полном календаре не показывает события, прошедшие в этом году - PullRequest
0 голосов
/ 05 ноября 2018

Я создал тему еще в мае 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» в коде и может отображать события только за текущий год, но не может отображать список с несколькими годами. Мне нужно, чтобы он отображал «список» с событиями, которые соответствуют выбранному диапазону дат.

Любая помощь будет принята с благодарностью. Большое спасибо!

1 Ответ

0 голосов
/ 05 ноября 2018

Благодаря пользователю ADyson я создал представление, не основанное на «текущем году», и применил его к разделу «Если месяцы отличаются, перейдите к списку года» в коде. Итак, теперь эта часть выглядит так:

 // If months are different, switch to the year list.
  if ('listYear' !== v.name && ! a) {
    $('#calendar').fullCalendar('changeView', 'perTotal'); //That's where I made the change...it's now "perTotal" instead of "listYear".
  // Otherwise, switch back to month list, if needed.
  } else if ('listMonth' !== v.name) {
    $('#calendar').fullCalendar('changeView', 'listMonth');
  }
}

«perTotal» - это пользовательское представление, для которого установлено «список» для типа представления, которое не ограничено текущим годом.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...