我正在尝试使用FullCalendar
制作一个简单的调度程序,当我从 JSON 获取数据时,它看不到我的开始/结束日期,尽管在硬编码数组时没有问题。
日历.js
var calendar = $('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay,listMonth'
},
eventRender: function (event, element, view) {
var theDate = event.start
var endDate = event.dowend;
var startDate = event.dowstart;
if (theDate >= endDate) {
return false;
}
if (theDate <= startDate) {
return false;
}
},
events: [{
id: 1,
title: "Front End",
start: '15:00',
end: '17:00',
dow: [1],
dowstart: new Date('2018-06-03'),
dowend: new Date('2018-06-17'),
color:'grey'
}],
eventSources: [{
url: 'schedule.php',
type: 'GET',
},
}],
});
时间表.php
$events = array();
foreach ($response as $var) {
$temp['id'] = $var['id'];
$temp['title'] = stripslashes($var['title']);
$temp['start'] = $var['start'];
$temp['end'] = $var['end'];
$temp['dow'] = array($var['dow']);
$temp['dowstart'] = date("Y-m-d", strtotime($var['dowstart']));
$temp['dowend'] = date("Y-m-d", strtotime($var['dowend']));
$events[] = $temp;
}
echo json_encode($events);
文件输出:json-response.img
虽然日历中events
数组的数据.js和时间表中的 JSON 响应.php相同,但我在我的
索引.html
最终结果.img
问题是dowstart
和dowend
只是字符串,而不是日期。因此,对它们进行大于或小于比较是简单的字符串比较,而不是日期比较,当然这对您的目的来说是不可靠的。
如果在进行比较之前将它们转换为momentJS对象,则可以正常工作:
var endDate = moment(event.dowend);
var startDate = moment(event.dowstart);
有关工作演示,请参阅 http://jsfiddle.net/sbxpv25p/744/。
附言如果您想知道为什么事件的start
和end
属性不需要相同的属性,那是因为这些是 fullCalendar 期望为事件接收的标准属性,当它获得它们时,它会自动将它们转换为 momentJS 对象(如果它们还没有(。显然,对于您的自定义属性,它不知道您希望将它们视为日期,因此您必须自己实现它。