FullCalendar: предупреждение об устаревании: указанное значение не соответствует распознанному формату RFC2822 или ISO - PullRequest
0 голосов
/ 15 декабря 2018

Я пробовал много вещей, но не смог понять, где мне не хватает.Также пробовал разные решения.

$('#calendar').fullCalendar({
      eventClick: function(eventObj, jsEvent, view) {
          $("#eventSubTitle").html(eventObj.patient);
          $("#eventLink").attr('href', eventObj.url);
          $("#eventHeader").html(eventObj.appointmentType);
          $("#eventStartTime").html(eventObj.start._i);
          $("#eventEndTime").html(eventObj.end._i);
          $("#appointmentId").val(eventObj.id);
          $("#eventDetailModal").modal('show');
      },
      timeFormat: 'hh:mm a',
      header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,basicWeek,basicDay'
      },
      defaultView: 'basicWeek',
      defaultDate: $.datepicker.formatDate('mm/dd/yy', new Date()),
      editable: true,
      eventLimit: true, // allow "more" link when too many events
      events:  ${raw(allList as String)},
      eventRender: function(event, element) { 
        element.find('.fc-title').append(" - " + event.patient); 
      },
      eventAfterRender: function (event, element, view) {
          var dataHoje = new Date();
          if (event.start < dataHoje && event.end > dataHoje) {
              element.css('background-color', 'green');
          } else if (event.start < dataHoje && event.end < dataHoje) {
              element.css('background-color', 'red');
          } else if (event.start > dataHoje && event.end > dataHoje) {
              element.css('background-color', '#000080');
          }
      }, 
    });

Можете ли вы предложить мне немного обойти вышеупомянутый код.

1 Ответ

0 голосов
/ 17 декабря 2018

Проблема в том, что $.datepicker.formatDate('mm/dd/yy', new Date()) выдаст строку в формате мм / дд / гг.Но это неоднозначно - если бы сегодня было 3 января 2019 года, он вывел бы 01/03/19 ... но как календарь мог быть уверен, что он не был в формате дд / мм / гг - возможно, вы имели в виду 1 марта?Это не имеет никакого способа узнать.Все, что у него есть - это необработанная строка без контекста.

Решение здесь простое: не используйте неоднозначные форматы даты.На самом деле, не используйте строки для дат вообще, если вы можете избежать этого - используйте Date или MomentJS objects везде, где это возможно.

(Эти объекты внутренне несут информацию о дате, не беспокоясь об огромном разнообразии читаемых человеком форматов строк, в которых может отображаться дата / время. Они могут быть сделаны для вывода информации в любомиз этих форматов, но это не то, как они хранят их, поэтому никогда не возникает никаких сомнений относительно значения данных.)

В этом случае вы можете легко избежать использования строк:

defaultDate: new Date()

совершенно корректно - fullCalendar будет принимать любую строку даты или объект, который также принимается конструктором momentJS (или он принимает предварительно созданный объект momentJS).Вам вообще не нужно форматировать его.

Но, поскольку defaultDate по умолчанию будет сегодняшней датой, вы можете просто полностью удалить эту строку - вы просто устанавливаете ее на то, что ужезначение по умолчанию.

Конечно, возможно, у вас также есть такая же проблема с данными о вашем событии - я не вижу этого, поэтому я не могу комментировать.Но вы должны убедиться, что ваши даты начала и окончания указаны в правильном, однозначном формате, чтобы fullCalendar мог быть уверен, что вы имеете в виду.

См. http://momentjs.com/docs/#/parsing/string/, https://fullcalendar.io/docs/defaultDate и https://fullcalendar.io/docs/moment для дальнейшей документации этого.

...