我正在使用fullcalendar而无法查看问题的解决方案。 我尝试了很多东西。 Stackoverflow帖子和我自己的想法(基于SO帖子)。
问题/挑战
当我在fullcalendar上添加事件时。它将它添加到日历中,这就是我想要的。但是应该对重叠事件进行限制。这样就不存在重叠事件了。
我的问题与Determining if two time ranges overlap at any point
极为相似我有什么
我从数据库中获取的数组中的事件列表。
数据库
我从事件开始和结束时间以任何可用格式(例如时间戳/日期)下载
示例
最终代码
Efficient way to check if current date is between 2 dates (years dont matter)基于此处接受的答案
if($error == false){
foreach($events as $sKey=>$dbEvent){
if(strtotime($dbEvent['start_time']) == strtotime($event->startTime))
{
$sKey = 0;
break;
}
if((strtotime($dbEvent['start_time']) < strtotime($event->startTime)) && (strtotime($dbEvent['end_time']) > strtotime($event->startTime))){
break;
}else{
$sKey = null;
}
}
foreach($events as $eKey=>$dbEvent){
if(strtotime($dbEvent['end_time']) == strtotime($event->endTime))
{
$eKey = 0;
break;
}
if((strtotime($dbEvent['end_time']) < strtotime($event->endTime)) && (strtotime($dbEvent['start_time']) > strtotime($event->endTime))){
break;
}else{
$eKey = null;
}
}
//Checking if there is some event overlapping
if($sKey ==null && $sKey != '0'){
$error = false;
}else{
$error = true;
$errorMessage = 'bezet';
}
if($eKey ==null && $eKey != '0'){
$error = false;
}else{
$error = true;
$errorMessage = 'bezet';
}
}
执行代码没有问题。它只是在我期望它们时没有给出错误。我100%确定有很多代码可以写得更短。在这个问题起作用后我重构了。
我的大脑坚持这个问题,因为如果开始没有重叠并且结束不像第一个场景那样重叠。我尝试了很多解决方案,但我只是错过了一点。
做什么工作 当开始和结束时间与发布的事件完全相同时。
任何帮助提示/提示/评论都将不胜感激。
使用fullcalendar fork:
https://github.com/seankenny/fullcalendar
https://github.com/arshaw/fullcalendar
重新阅读链接的stackoverflow问题...... 我把我的代码更改为:
foreach($events as $dbEvent){
$dbEventStart = strtotime($dbEvent['start_time']);
$dbEventEnd = strtotime($dbEvent['end_time']);
$evStart = strtotime($event->startTime);
$evEnd = strtotime($event->endTime);
if (($evStart < $dbEventEnd) && ($evEnd > $dbEventStart)) {
$error = true;
$errorMessage = 'het lijkt te werken';
}
}
evStart / evEnd(是新创建的事件)和dbevent是现有事件。
这个魔法解决了我的问题:)