比较开始和结束时间与其他时间块#39;

时间:2014-04-14 13:23:24

标签: php zend-framework fullcalendar

我正在使用fullcalendar而无法查看问题的解决方案。 我尝试了很多东西。 Stackoverflow帖子和我自己的想法(基于SO帖子)。

问题/挑战

当我在fullcalendar上添加事件时。它将它添加到日历中,这就是我想要的。但是应该对重叠事件进行限制。这样就不存在重叠事件了。

我的问题与Determining if two time ranges overlap at any point

极为相似

我有什么

我从数据库中获取的数组中的事件列表。

数据库

enter image description here

我从事件开始和结束时间以任何可用格式(例如时间戳/日期)下载

示例

enter image description here

最终代码

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是现有事件。

这个魔法解决了我的问题:)

0 个答案:

没有答案