FullCalendar:弃用警告:提供的值不是公认的RFC2822或ISO格式

时间:2018-12-15 06:15:25

标签: fullcalendar fullcalendar-3

我尝试了很多事情,但无法理解我所缺少的地方。 也尝试过不同的解决方案。

$('#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 :(得分:1)

问题是$.datepicker.formatDate('mm/dd/yy', new Date())会产生mm / dd / yy格式的字符串。但这并不明确-如果今天是2019年1月3日,它将输出01/03/19 ...但是日历如何确保它不是dd / mm / yy格式-也许您是说3月1日呢?它没有办法知道。它仅有的是原始字符串,没有任何上下文。

这里的解决方案很简单:不要使用含糊的日期格式。实际上,如果可以避免的话,根本不要使用字符串作为日期-尽可能使用Date或MomentJS objects

(这些对象在内部携带日期信息,而不必担心日期/时间可能出现的多种人类可读字符串格式的影响。可以使它们以以下任何一种方式输出信息格式,但这不是它们的存储方式,因此对数据的含义毫无疑问。)

在这种情况下,您可以轻松避免使用字符串:

defaultDate: new Date()

是完全有效的-fullCalendar会接受momentJS构造函数也接受的任何日期字符串或对象(或者它将接受预制的momentJS对象)。您完全不需要格式化它。

但是,由于defaultDate仍然默认为今天的日期,因此实际上您可以完全删除该行-您只需将其设置为已经是默认值即可。

当然,您的事件数据也可能有相同的问题-我看不到,因此无法发表评论。但是您应该确保开始日期和结束日期的格式正确无误,以便fullCalendar可以确定您的意思。

有关更多文档,请参见http://momentjs.com/docs/#/parsing/string/https://fullcalendar.io/docs/defaultDatehttps://fullcalendar.io/docs/moment