복붙노트

[JQUERY] FullCalendar에서 반복 이벤트

JQUERY

FullCalendar에서 반복 이벤트

해결법


  1. 1.Fullcalendar 이제 (다소) 지원은 매주 반복 이벤트, 여기에 나열된에게 간단한 대안을 추가합니다. 당신은 단지 같은 것을 필요 그래서 경우 : [오후 2시 오전 10 매주 월요일과 목요일을, 다음을 사용할 수 있습니다 :

    Fullcalendar 이제 (다소) 지원은 매주 반복 이벤트, 여기에 나열된에게 간단한 대안을 추가합니다. 당신은 단지 같은 것을 필요 그래서 경우 : [오후 2시 오전 10 매주 월요일과 목요일을, 다음을 사용할 수 있습니다 :

    events: [{
        title:"My repeating event",
        start: '10:00', // a start time (10am in this example)
        end: '14:00', // an end time (2pm in this example)
        dow: [ 1, 4 ] // Repeat monday and thursday
    }],
    

    JSFiddle

    이 배경 이벤트에 설명되어 있지만, 그것은뿐만 아니라 정기적 인 이벤트를 작동합니다.

    데이터베이스에이를 저장하는 것은 어렵지 않을 것이다.

    당신이 그 (것)들을 무한히 반복하지 않으려면, 당신은 몇 가지 시작 및 종료 날짜를 추가해야합니다.

    그래서 DB에서 :

    eventId  timeStart  timeEnd   dow    dateStart      dateEnd
         1      10:00    12:00  [1,4]  2015/03/01   2015/04/01  // Month of March
         1      10:00    12:00  [1,4]  2015/05/01   2015/06/01  // Month of May
         1      10:00    12:00  [1,4]  2016/01/01   2017/01/01  // Year of 2017
    

    JSON으로 클라이언트에이 전달 :

    { id:1, start:"10:00", end:"12:00", dow:[1,4],
      ranges[{start:"2015/03/01", end:"2015/04/01"},
             {start:"2015/05/01", end:"2015/06/01"},
             {start:"2016/01/01", end:"2017/01/01"},]
    }
    

    시간 범위 중 하나에있을 때와 클라이언트 측, 사용 fullcalendar의 eventRender에만 이벤트를 렌더링합니다. 이런 식으로 뭔가 작업을해야합니다 :

    eventRender: function(event){
        return (event.ranges.filter(function(range){ // test event against all the ranges
    
            return (event.start.isBefore(range.end) &&
                    event.end.isAfter(range.start));
    
        }).length)>0; //if it isn't in one of the ranges, don't render it (by returning false)
    },
    

    이벤트를 가정 사용자들은은으로 구성되어 있습니다 :

    var repeatingEvents = [{
        title:"My repeating event",
        id: 1,
        start: '10:00', 
        end: '14:00', 
        dow: [ 1, 4 ], 
        ranges: [{ //repeating events are only displayed if they are within at least one of the following ranges.
            start: moment().startOf('week'), //next two weeks
            end: moment().endOf('week').add(7,'d'),
        },{
            start: moment('2015-02-01','YYYY-MM-DD'), //all of february
            end: moment('2015-02-01','YYYY-MM-DD').endOf('month'),
        },/*...other ranges*/],
    },/*...other repeating events*/];
    

    JSFiddle

    경우 당신이 하룻밤 (여기 같은) 이벤트의 반복을 원하는 바로 종료 시간 24:00을 통해 이동합니다. 예를 들어 :

    {
      start: '10:00', //starts at 10 on monday
      end:   '27:00', //24+3 is handled correctly.
      dow: [1]
    }
    

    JSFiddle


  2. 2.이 사이트에서보세요 ... http://fajitanachos.com/Fullcalendar-and-recurring-events/

    이 사이트에서보세요 ... http://fajitanachos.com/Fullcalendar-and-recurring-events/

    그것은 반복 이벤트에 좋은 INSITE 많이 제공합니다. FullCalendar는 ID와 관련하여 지원 반복 이벤트를 수행합니다. 당신은 이벤트 중 하나를 서버 측 또는 클라이언트 측을 처리 할 수 ​​있지만, 기본 설정은 서버 측 것이다. 내가 당신에게 몇 가지 아이디어를 제공하지만, 그 모든 포함됩니다. 나는 반복 배운대로 이벤트를 유지하기 위해 고통입니다.

    당신이 그 (것) 클라이언트 측을 처리하고자한다면, 당신은 반복 이벤트의 빈도와 일의 논리를 통해 루프 것이다. 당신은 아마 다음 옵션 콜백 사용하여 각 루프 이벤트를 렌더링의 eventRender 콜백을 사용해야합니다. 이 문제는 여전히 데이터베이스에 주파수 옵션의 반복 주파수와 논리 연산자를 저장해야한다는 것입니다 ...

    ... 그리고 언제 당신이 이벤트는 모든 이벤트를 편집 할 것이라고 편집. 당신은 단지 하나의 이벤트를 삭제 필요한 경우 당신은 당신의 논리에서 문제의 시리즈로 실행됩니다 및 쉽게 거대한 엉망이 될 수 있습니다.

    두 번째 옵션은 모든 서버 측을 할 수 있었다. 두 테이블, 상위 이벤트 하나, 그리고 모든 재발로 두 번째를 만들기. 부모 테이블에서 당신은 고유 ID, 색상, 배경 색상, 제목, 올 데이는, isRecurring, 주파수, 당신은 동료에 부모 테이블에서 고유 ID를 사용하는 것, 자식 테이블에서 등을 입력 할 때, 일반적인 정보를 저장하는 것 각각의 재발 (삭제하려는 경우 염두에 두어야 / 자식 테이블의 행이 잘이 위치한 라벨이있는 테이블에있는 컬럼으로 고유 한 ID를 가질 필요가 편집 개별 이벤트). 당신이 반복 이벤트를 추가 할 때, 당신이 열거 필드를 추가 할 필요가 반복되는 이벤트 여부 AKA입니다 라벨 여부를 그 ...

    ... 그리고 당신은 당신이 부모로부터 어느 쿼리가 다음 이벤트가 그 이벤트에 관련된 얻을 반복되는 수 있다면 이벤트를 쿼리 할 때 등을 시작처럼 자사의 특정 정보를 자식 테이블로, 각각의 재발을 추가하고 종료합니다 두 번째 쿼리, 또는 당신은 INNER 하나 개의 단일 쿼리에서 table1.id = table2.parentID에 가입 사용할 수 있습니다.

    당신이 볼 수 있듯이, 이벤트를 반복하는 것은 매우 밖으로 당신이 필요 논리 찾을 매우 빠르고 상세하고 나는 적어도 시작하기에 이것은 당신 또는 누군가가 도움이되기를 바랍니다받을 수 있습니다. 건배.


  3. 3.메이크업의 부모와 여기 자식 관계에 대한 필요가 당신이 모든 이벤트를 전화를 더 사용하는 것이 당신의 PHP 파일에서 JQuery와 전체 달력 사용 기능 아래 다음을 반복 이벤트에 대한 간단한 솔루션을 제공하는 코드입니다.

    메이크업의 부모와 여기 자식 관계에 대한 필요가 당신이 모든 이벤트를 전화를 더 사용하는 것이 당신의 PHP 파일에서 JQuery와 전체 달력 사용 기능 아래 다음을 반복 이벤트에 대한 간단한 솔루션을 제공하는 코드입니다.

    function render_fccalendar_events() {
            $_POST['start'] = strtotime('2013-05-01');
            $_POST['end'] = strtotime('2013-05-31');
            $start = date('Y-m-d',$_POST['start']);
            $end = date('Y-m-d', $_POST['end']);
            $readonly = (isset($_POST['readonly'])) ? true : false;    
            $events = fcdb_query_events($start, $end);       
            render_json(process_events($events, $start, $end, $readonly));
    }
    
    function process_events($events, $start, $end, $readonly) {
        if ($events) {
            $output = array();
            foreach ($events as $event) {
                $event->view_start = $start;
                $event->view_end = $end;
                $event = process_event($event, $readonly, true);
                if (is_array($event)) {
                    foreach ($event as $repeat) {
                        array_push($output, $repeat);
                    }
                } else {
                    array_push($output, $event);
                }
            }
            return $output;
        }
    }
    
    function process_event($input, $readonly = false, $queue = false) {
        $output = array();
        if ($repeats = generate_repeating_event($input)) {
            foreach ($repeats as $repeat) {
                array_push($output, generate_event($repeat));
            }
        } else {
            array_push($output, generate_event($input));
        }
    
        if ($queue) {
            return $output;
        }
        render_json($output);
    }
    
    
    function generate_event($input) {
        $output = array(
            'id' => $input->id,
            'title' => $input->name,
            'start' => $input->start_date,
            'end' => $input->end_date,
            'allDay' => ($input->allDay) ? true : false,
            //'className' => "cat{$repeats}",
            'editable' => true,
            'repeat_i' => $input->repeat_int,
            'repeat_f' => $input->repeat_freq,
            'repeat_e' => $input->repeat_end
        );
        return $output;
    }
    
    
    
    function generate_repeating_event($event) {
    
        $repeat_desk = json_decode($event->repeat_desk);
        if ($event->repeat == "daily") {
            $event->repeat_int =0;
            $event->repeat_freq = $repeat_desk->every_day;
        }
        if ($event->repeat == "monthly") {
            $event->repeat_int =2;        
            $event->repeat_freq = $repeat_desk->every_month;
        }
        if ($event->repeat == "weekly") {
            $event->repeat_int =1;                
           $event->repeat_freq = $repeat_desk->every_weak;
        }
        if ($event->repeat == "year") {
            $event->repeat_int =3;                        
            $event->repeat_freq = $repeat_desk->every_year;
        }
    
        if ($event->occurrence == "after-no-of-occurrences") {
            if($event->repeat_int == 0){
                $ext = "days";
            }
            if($event->repeat_int == 1){
                $ext = "weeks";
            }
            if($event->repeat_int == 2){
                $ext = "months";
            }
            if($event->repeat_int == 3){
                $ext = "years";
            }
           $event->repeat_end =  date('Y-m-d',strtotime("+" . $event->repeat_int . " ".$ext));
        } else if ($event->occurrence == "no-end-date") {
            $event->repeat_end = "2023-04-13";
        } else if ($event->occurrence == "end-by-end-date") {
            $event->repeat_end = $event->end_date;
        }
    
    
    
        if ($event->repeat_freq) {
    
            $event_start = strtotime($event->start_date);
            $event_end = strtotime($event->end_date);
            $repeat_end = strtotime($event->repeat_end) + 86400;
            $view_start = strtotime($event->view_start);
            $view_end = strtotime($event->view_end);
            $repeats = array();
    
            while ($event_start < $repeat_end) {
                if ($event_start >= $view_start && $event_start <= $view_end) {
                    $event = clone $event; // clone event details and override dates
                    $event->start_date = date(AEC_DB_DATETIME_FORMAT, $event_start);
                    $event->end_date = date(AEC_DB_DATETIME_FORMAT, $event_end);
                    array_push($repeats, $event);
                }
                $event_start = get_next_date($event_start, $event->repeat_freq, $event->repeat_int);
                $event_end = get_next_date($event_end, $event->repeat_freq, $event->repeat_int);
            }
            return $repeats;
        }
        return false;
     }
    
    function get_next_date($date, $freq, $int) {
        if ($int == 0)
            return strtotime("+" . $freq . " days", $date);
        if ($int == 1)
            return strtotime("+" . $freq . " weeks", $date);
        if ($int == 2)
            return get_next_month($date, $freq);
        if ($int == 3)
            return get_next_year($date, $freq);
    }
    
    function get_next_month($date, $n = 1) {
        $newDate = strtotime("+{$n} months", $date);
        // adjustment for events that repeat on the 29th, 30th and 31st of a month
        if (date('j', $date) !== (date('j', $newDate))) {
            $newDate = strtotime("+" . $n + 1 . " months", $date);
        }
        return $newDate;
    }
    
    function get_next_year($date, $n = 1) {
        $newDate = strtotime("+{$n} years", $date);
        // adjustment for events that repeat on february 29th
        if (date('j', $date) !== (date('j', $newDate))) {
            $newDate = strtotime("+" . $n + 3 . " years", $date);
        }
        return $newDate;
    }
    
    function render_json($output) {
        header("Content-Type: application/json");
        echo json_encode(cleanse_output($output));
        exit;
    }
    
    
    function cleanse_output($output) {
        if (is_array($output)) {
            array_walk_recursive($output, create_function('&$val', '$val = trim(stripslashes($val));'));
        } else {
            $output = stripslashes($output);
        }
        return $output;
    }
    
    function fcdb_query_events($start, $end) {
        global $wpdb;
        $limit = ($limit) ? " LIMIT {$limit}" : "";
        $result = $wpdb->get_results("SELECT id, name,start_date,end_date,repeat_desk,`repeat`,occurrence,occurrence_desk
    
                                            FROM " . 
    
    $wpdb->prefix . "lgc_events
                                            WHERE (
                                            (start_date >= '{$start}' AND start_date < '{$end}')
                                            OR (end_date >= '{$start}' AND end_date < '{$end}')
                                            OR (start_date <= '{$start}' AND end_date >= '{$end}')
                                            OR (start_date < '{$end}' AND (`repeat`!= ''))
    
    
                                )
                                            ORDER BY start_date{$limit};");
    
        return return_result($result);
    }
    
    
    function return_result($result) {
        if ($result === false) {
            global $wpdb;
            $this->log($wpdb->print_error());
            return false;
        }
        return $result;
    }
    

    위의 코드에서 난 반복 주파수 JSON 코드를 저장하는 repeat_desk 사용

    및 JQuery와이 파일을 호출

     events:  {
                    url: '<?php echo $lgc_plugindir; ?>includes/imagerotator.php',
                    data: {
                        action: 'get_events'
                    },
                    type: 'POST'
                }
    

    난 당신이 귀하의 요구 사항에 따라이 코드를 사용할 수있는 워드 프레스이 사용


  4. 4.순간 나는 FullCalendar이 프로젝트를하고 그리고 난 이벤트를 반복해야한다. 이것이 나의 그것을 수행 할 수 있습니다 어떻게 왜. 이 코드 도움말 사람을 희망 :)

    순간 나는 FullCalendar이 프로젝트를하고 그리고 난 이벤트를 반복해야한다. 이것이 나의 그것을 수행 할 수 있습니다 어떻게 왜. 이 코드 도움말 사람을 희망 :)

    나는 데이터베이스에 다음 테이블이 있습니다 :

    CREATE TABLE IF NOT EXISTS `app_ext_calendar_events` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `users_id` int(11) NOT NULL,
      `name` varchar(255) NOT NULL,
      `description` text,
      `start_date` int(11) NOT NULL,
      `end_date` int(11) NOT NULL,
      `event_type` varchar(16) NOT NULL,
      `is_public` tinyint(1) DEFAULT NULL,
      `bg_color` varchar(16) DEFAULT NULL,
      `repeat_type` varchar(16) DEFAULT NULL,
      `repeat_interval` int(11) DEFAULT NULL,
      `repeat_days` varchar(16) DEFAULT NULL,
      `repeat_end` int(11) DEFAULT NULL,
      `repeat_limit` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_users_id` (`users_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;
    

    나는 반복 이벤트와 이벤트를 얻기 위해 다음의 PHP 클래스를 개발 :

    <?php
    
    class calendar
    {
      static public function get_events($date_from, $date_to,$calendar_type)
      {
        global $app_user;
    
        $list = array();
    
        $events_query = db_query("select * from app_ext_calendar_events where FROM_UNIXTIME(start_date,'%Y-%m-%d')>='" . $date_from . "' and  FROM_UNIXTIME(end_date,'%Y-%m-%d')<='" . $date_to . "' and event_type='" . $calendar_type . "' and users_id='" . db_input($app_user['id']) . "'");
        while($events = db_fetch_array($events_query))
        {
          $list[] = $events; 
        }
    
        if(count($repeat_events_list = calendar::get_repeat_events($date_to,$calendar_type)))
        {
          $list = array_merge($list,$repeat_events_list);
        }
    
        return $list;
      }
    
      public static function weeks_dif($start, $end)
      {
        $year_start = date('Y',$start);
        $year_end = date('Y',$end);
    
        $week_start = date('W',$start); 
        $week_end = date('W',$end);
    
        $dif_years = $year_end - $year_start;
        $dif_weeks = $week_end - $week_start;
    
        if($dif_years==0 and $dif_weeks==0)
        {
          return 0;
        }
        elseif($dif_years==0 and $dif_weeks>0)
        {
          return $dif_weeks;
        }
        elseif($dif_years==1)
        {
          return (42-$week_start)+$week_end;
        }
        elseif($dif_years>1)
        {
          return (42-$week_start)+$week_end+(($dif_years-2)*42);
        }
    
    
      }
    
      public static function months_dif($start, $end)
      {
        // Assume YYYY-mm-dd - as is common MYSQL format
        $splitStart = explode('-', date('Y-n',$start));
        $splitEnd = explode('-', date('Y-n',$end));
    
        if (is_array($splitStart) && is_array($splitEnd)) 
        {
            $startYear = $splitStart[0];
            $startMonth = $splitStart[1];
            $endYear = $splitEnd[0];
            $endMonth = $splitEnd[1];
    
            $difYears = $endYear - $startYear;
            $difMonth = $endMonth - $startMonth;
    
            if (0 == $difYears && 0 == $difMonth) 
            { // month and year are same
                return 0;
            }
            else if (0 == $difYears && $difMonth > 0) 
            { // same year, dif months
                return $difMonth;
            }
            else if (1 == $difYears) 
            {
                $startToEnd = 13 - $startMonth; // months remaining in start year(13 to include final month
                return ($startToEnd + $endMonth); // above + end month date
            }
            else if ($difYears > 1) 
            {
                $startToEnd = 13 - $startMonth; // months remaining in start year 
                $yearsRemaing = $difYears - 2;  // minus the years of the start and the end year
                $remainingMonths = 12 * $yearsRemaing; // tally up remaining months
                $totalMonths = $startToEnd + $remainingMonths + $endMonth; // Monthsleft + full years in between + months of last year
                return $totalMonths;
            }
        }
        else 
        {
          return false;
        }
      }
    
      public static function get_repeat_events($date_to,$calendar_type)
      {
        global $app_user;
    
        //convert date to timestamp
        $date_to_timestamp = get_date_timestamp($date_to);
    
        $list = array();
    
        //get all events that already started (start_date<=date_to)      
        $events_query = db_query("select * from app_ext_calendar_events where length(repeat_type)>0 and FROM_UNIXTIME(start_date,'%Y-%m-%d')<='" . $date_to . "' and  event_type='" . $calendar_type . "' and users_id='" . db_input($app_user['id']) . "'");
        while($events = db_fetch_array($events_query))
        {
          $start_date = $events['start_date'];
    
          //set repeat end      
          $repeat_end = false;
          if($events['repeat_end']>0)
          {
            $repeat_end = $events['repeat_end'];
          } 
    
          //get repeat events by type                       
          switch($events['repeat_type'])
          {
            case 'daily': 
                //check repeat events day bay day       
                for($date = $start_date; $date<=$date_to_timestamp; $date+=86400)            
                {
                  if($date>$start_date)
                  {
                    $dif = round(abs($date-$start_date)/86400);
    
                    if($dif>0)
                    {  
                      $event_obj = $events;                                                
                      $event_obj['start_date'] = strtotime('+' . $dif . ' day',$event_obj['start_date']);                                                          
                      $event_obj['end_date'] = strtotime('+' . $dif . ' day',$event_obj['end_date']);
    
                      if(calendar::check_repeat_event_dif($dif,$event_obj,$repeat_end))
                      {                
                        $list[] = $event_obj;                
                      }
                    }
                  }
                }                                                          
              break;
            case 'weekly':  
                //check repeat events day bay day    
                for($date = $start_date; $date<=$date_to_timestamp; $date+=86400)            
                {
                  if($date>$start_date)
                  {
                    //find days dif
                    $dif = round(abs($date-$start_date)/86400);
                    //find week dif
                    $week_dif = calendar::weeks_dif($start_date, $date);
    
                    if($dif>0 and (in_array(date('N',$date),explode(',',$events['repeat_days']))))
                    {  
                      $event_obj = $events;                                                
                      $event_obj['start_date'] = strtotime('+' . $dif . ' day',$event_obj['start_date']);                                                          
                      $event_obj['end_date'] = strtotime('+' . $dif . ' day',$event_obj['end_date']);
    
                      if(calendar::check_repeat_event_dif($week_dif,$event_obj,$repeat_end))
                      {                
                        $list[] = $event_obj;                
                      }
                    }
                  }
                }                       
    
              break;            
            case 'monthly':                        
                /**
                 *in calendar we display 3 month in one view
                 *so we have to check difference for each month
                 */
    
                 //check 1                                      
                $date_to_timestamp2 = strtotime('-2 month',$date_to_timestamp);
    
                $dif =  calendar::months_dif($start_date, $date_to_timestamp2);
    
                if($dif>0)
                {  
                  $event_obj = $events;                                                
                  $event_obj['start_date'] = strtotime('+' . $dif . ' month',$event_obj['start_date']);                                                          
                  $event_obj['end_date'] = strtotime('+' . $dif . ' month',$event_obj['end_date']);
    
                  if(calendar::check_repeat_event_dif($dif,$event_obj,$repeat_end))
                  {                
                    $list[] = $event_obj;                
                  }
                }
    
                //check 2
                $date_to_timestamp1 = strtotime('-1 month',$date_to_timestamp);
    
                $dif =  calendar::months_dif($start_date, $date_to_timestamp1);
    
                if($dif>0)
                {  
                  $event_obj = $events;                                                
                  $event_obj['start_date'] = strtotime('+' . $dif . ' month',$event_obj['start_date']);                                                          
                  $event_obj['end_date'] = strtotime('+' . $dif . ' month',$event_obj['end_date']);
    
                  if(calendar::check_repeat_event_dif($dif,$event_obj,$repeat_end))
                  {                
                    $list[] = $event_obj;                
                  }
                }
    
                //check 3
                $dif =  calendar::months_dif($start_date, $date_to_timestamp);
    
                if($dif>0)
                {     
                  $event_obj = $events;                                             
                  $event_obj['start_date'] = strtotime('+' . $dif . ' month',$event_obj['start_date']);                                                          
                  $event_obj['end_date'] = strtotime('+' . $dif . ' month',$event_obj['end_date']);
    
                  if(calendar::check_repeat_event_dif($dif,$event_obj,$repeat_end))
                  {                                
                    $list[] = $event_obj;
                  }
                }
    
              break;
            case 'yearly':                        
                $dif =  date('Y',$date_to_timestamp)-date('Y',$start_date);
    
                if($dif>0)
                {             
                  $events['start_date'] = strtotime('+' . $dif . ' year',$events['start_date']);                                                          
                  $events['end_date'] = strtotime('+' . $dif . ' year',$events['end_date']);
    
                  if(calendar::check_repeat_event_dif($dif,$events,$repeat_end))
                  {
                    $list[] = $events;
                  }
                }                                                                                               
              break;
          }            
    
        }
    
        return $list;
    
      }
    
      static public function check_repeat_event_dif($dif,$events,$repeat_end)
      {
        $check = true;
    
        if($dif>0)
        {
          //check interval
          if($dif/$events['repeat_interval']!=floor($dif/$events['repeat_interval'])) $check=false;            
    
          //check repeat limit
          if($events['repeat_limit']>0)            
          if(floor($dif/$events['repeat_interval'])>$events['repeat_limit']) $check=false;
        }
        else
        {
          $check=false; 
        } 
    
        //check repeat end date            
        if($repeat_end>0)
        {
          if($repeat_end<$events['start_date'])
          {
             $check=false;
          }
        }
    
        return $check;
      }  
    
    }
    

    기능 get_events 모든 이벤트 + 반복 이벤트를 가져 내 방식으로 반복 이벤트의 4 종류가있다 : 매일, 매주, 매월, 매년 + 반복 구간 반복 날짜 끝 반복 한계가있다.

    기능 get_repeat_events 이벤트의 각 유형에 대한 차이를 계산하고있는 경우 반복 이벤트를 포함한다.

    참고 : 기능 db_query는 () myslq_query 또는 다른 것으로 대체 할 수있다

    FullCalendar I에 이벤트를 준비하기 위해 다음 코드를 사용하고 있습니다

    $list = array();        
    
      foreach(calendar::get_events($_GET['start'],$_GET['end'],'personal') as $events)
      {
        $start = date('Y-m-d H:i',$events['start_date']);
        $end = date('Y-m-d H:i',$events['end_date']);
    
    
        $list[] = array('id' => $events['id'],
                      'title' => addslashes($events['name']),
                      'description' => str_replace(array("\n\r","\n","\r"),'<br>',$events['description']),
                      'start' => str_replace(' 00:00','',$start),
                      'end' => str_replace(' 00:00','',$end),
                      'color'=> $events['bg_color'],                      
                      'allDay'=>(strstr($start,'00:00') and strstr($end,'00:00')),
                      'url' => url_for('ext/calendar/personal_form','id=' . $events['id'])                      
                      );      
      }
    
      echo json_encode($list);
    

  5. 5.이것은 eventRender 내에서 아주 능숙하게 일 듯 : 기능 (이벤트, 요소) {}

    이것은 eventRender 내에서 아주 능숙하게 일 듯 : 기능 (이벤트, 요소) {}

                EXAMPLE JSON:
                var json = [{title: "All Day Event",
                  start: "2015-12-22T00:00",
                  end: "2015-12-22T23:55",
                  dow: [2,4],
                  recurstart: moment("2015-12-22").startOf("week"),
                  recurend: moment("2015-12-22").endOf("week").add(1,'w')},{
                  title: "Long Event",
                  start: "2015-12-21T00:00",
                  end: "2015-12-24T23:55",
                  recurstart: moment("2015-12-21").startOf("month"),
                  recurend: moment("2015-12-24").endOf("month"),
                }];
    
                eventRender: function(event, element){
                var theDate = moment(event.start).format("YYYY-MM-DD");
                var startDate = event.recurstart;
                var endDate = event.recurend;
    
                if (startDate < theDate && theDate < endDate) {
                    console.log(theDate);
                    }
                else {
                    return event.length>0;
                }
                }, /* End eventRender */
    

    1) JSON의 시작 / 종료 날짜 및 시간을 설정합니다.

    2) 시작과 JSON 재발 엔드 RECUR 두 개의 사용자 정의를 작성합니다.

    3) 사용은 RECUR 기간을 만들 moment.js : http://momentjs.com/docs/#/durations/.

    4) 재발 시작 일주일의 시작을 정확히하기 위해 (시작 : 날짜를 사용합니다.

    5) 재발 종료 1 주를 추가 주 +의 끝을 찾아 낼 (끝 :) 날짜를 사용합니다.

    6) RECUR 제한을 만들 수 1, 2, 3 주 추가.

    RECUR 제한을 관리 할 수있다) "": 7) (recurlimit라는 JSON의 다른 부분을 추가.

    8) eventRender 내에서 변수를 사용하여 - 날짜 설정 내 예를 사용하는 순간 (event.start입니다 (theDate)). 그것은 제대로 그래서이를 포맷하는 것이 중요합니다 시작 / 종료 / recurstart 등 모든 일치하는 형식 즉 (YYYY-MM-DD) http://momentjs.com/docs/#/displaying/format/.

    사용자 정의 recurstart 9) 변수

    사용자 정의 recurend 10) 변수

    로그 결과 - 문은을 (theDate) (recurstart) (recurend) 사이에 내리는 날씨를 볼 경우 11)를 사용

    12) 사용 ELSE 문은 해당 매개 변수에 속하지 않는 다른 이벤트를 숨길> 0 길이를 반환합니다.

    13) 비 반복 이벤트는 순간 ( "경기 시작 날짜")이 있어야합니다. startOf ( "달") 및 순간 ( "경기 시작 날짜").! 로베르토 ( "달") 그렇지 않으면 볼 수 없습니다.


  6. 6.FullCalendar가 (slicedtoad의 답변을 참조) 내장 처리 할 수있는 것보다 더 복잡한 반복 이벤트를 가지고 사람들을 위해, 당신은 rSchedule를 사용할 수 있습니다.

    FullCalendar가 (slicedtoad의 답변을 참조) 내장 처리 할 수있는 것보다 더 복잡한 반복 이벤트를 가지고 사람들을 위해, 당신은 rSchedule를 사용할 수 있습니다.

    import { Schedule } from '@rschedule/rschedule';
    import { StandardDateAdapter } from '@rschedule/standard-date-adapter';
    
    const mondayDate = new Date(2019, 6, 15);
    const tuesdayDate = new Date(2019, 6, 16);
    
    const schedule = new Schedule({
      // add specific dates
      dates: [
        new StandardDateAdapter(mondayDate, {duration: 1000 * 60 * 60 * 2})
      ],
      // add recurrence rules
      rrules: [{
        start: tuesdayDate,
        duration: 1000 * 60 * 60 * 5, // duration is expressed in milliseconds
        frequency: 'WEEKLY'
      }],
    });
    
    const firstFiveEvents = schedule
      .occurrences({ take: 5 })
      .toArray()
      .map(adapter => 
        ({title: 'My event title', start: adapter.date, end: adapter.end})
      );
    
    // You can then pass `firstFiveEvents` to fullcalendar for rendering
    

    rSchedule는 순간 / luxon뿐만 아니라 시간대를 지원합니다. 자세한 내용은, 당신은 rSchedule의 문서를 확인할 수 있습니다.


  7. 7.복잡한 반복 규칙을 처리하기 위해, 우리의 iCal의 RRULE 구현 라이브러리를 사용합니다. 우리는 JS 라이브러리 (RRULE)가 있습니다. FullCalendar는 이제 RRULE 플러그인을 지원합니다.

    복잡한 반복 규칙을 처리하기 위해, 우리의 iCal의 RRULE 구현 라이브러리를 사용합니다. 우리는 JS 라이브러리 (RRULE)가 있습니다. FullCalendar는 이제 RRULE 플러그인을 지원합니다.


  8. 8.당신이 원하는 것을 할 것입니다 플러그인은 이제 있습니다 : http://momentjs.com/docs/#/plugins/recur/

    당신이 원하는 것을 할 것입니다 플러그인은 이제 있습니다 : http://momentjs.com/docs/#/plugins/recur/

  9. from https://stackoverflow.com/questions/15161654/recurring-events-in-fullcalendar by cc-by-sa and MIT license