FullCalendar 始终显示 2 小时事件

FullCalendar shows always 2Hours events

嗨,我有 rhis 元素 我必须在 Jquery FullCalendar 中显示。

    <script type="text/javascript">

        $(document).ready(function () {

                calendarcreate();
                var obj;
            });

           function calendarcreate() {
                $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                data: "{}",
                dataType:"json",
                url: "Calendario.aspx/GetEvents",                
                success: function (data) {
                    $('#<%=fullcal.ClientID%>').fullCalendar({
                        firstDay: 1,
                        monthNames: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],
                        monthNamesShort: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'],
                        dayNames: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],
                        dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
                        buttonText: {
                            today: 'Oggi',
                            month: 'Mese',
                            day: 'Giorno',
                            week: 'Settimana',
                            prev: 'Prec',
                            next: 'Succ'
                        },
                        header: {
                            left: 'today',
                            center: 'title',
                            right: 'prev,next'
                        },
                        timeFormat: "H:mm",
                        slotLabelFormat: "H:mm",
                        slotLabelInterval: '00:30:00',
                        defaultView: "agenda",
                        allDaySlot: true,
                        allDayText: 'Tutto il Giorno',
                        minTime: "08:00:00",
                        maxTime: "22:00:00",
                        displayEventEnd: true,
                        axisFormat: 'H:mm',
                        titleFormat: 'D MMMM YYYY',
                        columnFormat: 'ddd D/M',
                        //inserimento appuntamenti da Ajax
                        events: $.map(data.d, function (item, i) {
                            var event = new Object();
                            event.id = item.EventID;

                            alert(item.StartHour);
                            alert(item.EndHour);
                            event.start = new Date(item.DateYear, item.DateMonth - 1, item.DateDay, item.StartHour, item.StartMinute);
                            event.end   = new Date(item.DateYear, item.DateMonth - 1, item.DateDay, item.EndHour, item.EndMinute);
                            event.title = item.EventName;
                            event.color = item.Color;

                            event.allDay = false;

                            return event;
                        })
                    });
                },
                error: function (XMLHttpRequest, textStatus, errorThrown)
                { debugger; }
            }); 

        }
    </script>

如何查看,数据 2016-09-16 中的事件是:

 - Id = 6, From 11.30 To 12.30
 - Id = 7, From 10.30 To 11.30

在我放入 FullCalendar 事件创建的警报中,显示了正确的结束时间。因此,对于数据 2016-09-16 中的事件,它提醒我 12 和 11。

问题是 FullCalendar 向我显示了这样的事件:

 - Id = 6 From 11.30 To 13.30
 - Id = 7 From 10.30 To 12.30

所以总是 2 小时的长度

FullCalendar 本机使用 moment.js 对象而不是 JavaScript Date 对象。 moment.js 库已包含在 fullCalendar 中。

因此最好替换为:

event.start = new Date(item.DateYear, item.DateMonth - 1, item.DateDay, item.StartHour, item.StartMinute);
event.end   = new Date(item.DateYear, item.DateMonth - 1, item.DateDay, item.EndHour, item.EndMinute);

有了这个:

event.start = moment({ y: item.DateYear, M: item.DateMonth - 1, d: item.DateDay, h: item.StartHour, m: item.StartMinute, s: 0, ms: 0});
event.end   = moment({ y: item.DateYear, M: item.DateMonth - 1, d: item.DateDay, h: item.EndHour, m: item.EndMinute, s: 0, ms: 0});

此外,您是否在+01:00 时区(意大利)?问题可能由此引起。如果是这种情况,fullCalendar 中有一些选项可以正确处理时区。