我将事件日期存储在mySQL中,作为日期时间,并使用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();
});
答案 0 :(得分:1)
很抱歉造成混乱。我在正常的开始/结束事件中使用了日期时间格式,因此我假设可以将这种逻辑传递给startTime和endTime。您是对的,我误读了文档。
我将startTime和endTime更改为在数据库中键入“ time”,并且正在加载显示的时间。
如果还有其他人发现它有用,则startRecur和endRecur字段也以'date'的形式存储在我的数据库中。我仅使用像'2019-05-13'这样的日期来使它们工作。
如果在我的数据库中填充了这些字段(重复发生的事件字段),那么我将不再在通常用于显示正常事件的“开始”和“结束”字段中存储任何内容!话虽如此,我还使用'start'和'end'日期参数从数据库中获取日期,以便在用户向前或向后移动日历时根据需要加载。
为了使我的重复性事件有效,我进行了如下查询:
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的帮助对我有多大帮助,一旦完成,我将为该许可证付费,因此您的工作不会浪费。
再次感谢。