在FullCalendar中设置日期时弃用警告

时间:2018-07-02 06:59:42

标签: javascript jquery fullcalendar momentjs

如何使fullCalendar接受不同的日期和时间格式?

例如,我的活动的日期格式如下:

02.07.2018 08:55:00 

对于这种日期时间格式,我会从moment.js收到警告

  

“不建议使用的警告:提供的值不是公认的ISO格式”。

2 个答案:

答案 0 :(得分:2)

不赞成使用此警告是因为您可能在分析日期时未在moment中指定格式。 Moment JS在内部使用new Date(),其日期应为ISORFC2822格式。

之所以弃用,是因为跨浏览器在解析日期字符串方面的支持有所不同。

Chrome浏览器将new Date("02.07.2018 08:55:00")解析为Wed Feb 07 2018 08:55:00 GMT+0530 (India Standard Time)

Firefox无法解析相同内容并输出Invalid Date

在Mac和Linux Fedora的Chrome和Firefox中进行了验证。

为克服跨浏览器的开销,moment将您传递的格式视为参数。显然,您使用的日期不是这些格式。

要禁止弃用警告,请执行以下任一操作

  1. 您应该通过moment对象提及日期格式。

moment("02.07.2018 08:55:00","DD.MM.YYYY HH:mm:ss")

  1. 在当前日期构造之前通过moment.suppressDeprecationWarnings = true;禁止显示。

下面的示例在fullCalendar中将事件添加到July 2, 2018,并且日期格式按照指定的方式给出。

$(function() {
  var fc_date_format = "DD.MM.YYYY HH:mm:ss";
  var event = {id:1, title:"Logged in to StackOverflow", start:moment("02.07.2018 12:30:45", fc_date_format)}
  $('#calendar').fullCalendar({
      weekends : false
  });
  $('#calendar').fullCalendar("renderEvent", event, true);
});
<link href="https://fullcalendar.io/releases/fullcalendar/3.9.0/fullcalendar.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script src="https://fullcalendar.io/releases/fullcalendar/3.9.0/fullcalendar.min.js"></script>

<div id='calendar'></div>

答案 1 :(得分:1)

我通过在初始化fullCalendar时设置eventDataTransform函数找到了解决此问题的方法。在其中,我将数据参数转换为有效格式。解决方案的部分代码

$('#calendar').fullCalendar({

    ...

    eventDataTransform: function (event) {
        event.start = moment(event.start, 'DD.MM.YYYY HH:mm');
        event.end = moment(event.end, 'DD.MM.YYYY HH:mm');
        return event;
    }

    ...

});