1

我在 mySQL 中将我的事件日期存储为 datetime 并使用 fullcalendar 版本 4,它们始终正确显示。我现在正在努力将定期事件添加到日历中,但是当我这样做时,我所有的定期事件都会以上午 12 点开始时间显示,尽管我的实际事件日期/时间是什么。

看看代码笔中发生了什么。我附上了原始代码以供参考。

我在想,也许我没有为重复事件正确存储日期和时间,但正如我所说,它们确实显示正确,直到我将它们设为重复事件。

https://codepen.io/michels287/pen/eaBmxN?editors=0010

document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');

var calendar = new FullCalendar.Calendar(calendarEl, {
    selectMirror: true,
    plugins: ['interaction', 'resourceDayGrid', 'resourceTimeGrid'],
    header: {
        right: 'prevYear,prev,next,today,nextYear',
        center: 'title',
        left: 'resourceTimeGridDay,resourceTimeGridTwoDay,timeGridWeek,dayGridMonth'
    },
    views: {
        resourceTimeGridTwoDay: {
            type: 'resourceTimeGrid',
            duration: {
                days: 2
            },
            buttonText: '2 days',
        }
    },
    defaultView: 'resourceTimeGridDay',
    datesAboveResources: true,
    editable: true,
    nowIndicator: true,
    eventLimit: true,
    schedulerLicenseKey: 'CC-Attribution-NonCommercial-NoDerivatives',
    events: [ { 
      allDay: false,
      color: "#FFD700",
      company_id: "1",
      startTime: "2019-05-13 14:00:00",
      endTime: "2019-05-13 14:00:00",
      id: "22218",
      daysOfWeek: [0,1,2],
      resourceId: "1"  }],
         resources: [{
            id: '1',
            title: 'Room A'
        },
        {
            id: '2',
            title: 'Room B'
        }
    ]
});

calendar.render();
});
4

1 回答 1

1

很抱歉造成混乱。我对正常的开始/结束事件使用日期时间格式,所以我认为我可以将该逻辑转移到 startTime 和 endTime。你是对的,我误读了文档。

我将 startTime 和 endTime 更改为在我的数据库中键入“时间”,并且正在加载时间,如您所示。

如果其他人遇到这个并发现它有用,那么 startRecur 和 endRecur 字段也会作为“日期”存储在我的数据库中。例如,我只使用像“2019-05-13”这样的日期来让它们工作。

如果这些字段(重复事件字段)填充在我的数据库中,我将不再在用于显示正常事件的通常“开始”和“结束”字段中存储任何内容!话虽如此,我还使用“开始”和“结束”日期参数从我的数据库中获取日期,以便在用户前后移动日历时根据需要加载。

为了使这与我的经常性事件一起工作,我进行了这样的查询:

SELECT non_recurring_event_fields_here FROM appointments appts WHERE (appts.start BETWEEN '".$start."' AND '".$end."') 

    UNION ALL

SELECT recurring_event_fields_are_here FROM appointments appts WHERE appts.start IS NULL

通过之后执行 UNION ALL 查询,它将获取我所有的重复事件并显示在客户端(感谢 fullcalendar 的 js),但是它们是在我的数据库中设计的:使用 startRecur、endRecur、startTime、endTime、daysOfWeek 等。

ADyson,根据您的意见和建议,我现在了解重复事件的工作原理。我知道到目前为止,您在我从 3 更新到 fullcalendar 4 方面为我提供了多少帮助。一旦完成,我将支付许可证费用,因此您的努力不会白费。

再次感谢。

于 2019-05-14T16:23:02.623 回答