2017-09-03 322 views
8

我正在使用完整日曆,日曆正在利用Google Calendar API引入事件。全日曆顯示全天事件

我在agendaWeekagendaDay中查看的時間段顯示爲全天的事件時遇到問題。這可以防止用戶正確顯示他們的事件,並且很難確定他們的可用性在一天或一週內的可用性。

例如,我已確認事件的時間從早上8點到上午10點。

任何想法?把這個分類出來很困難。

$('#calendar').fullCalendar({ 
    theme: true, 
    header: { 
     left: 'prev,next today', 
     center: 'title', 
     right: 'month,agendaWeek,agendaDay' 
    }, 
    buttonIcons: { 
     prev: 'circle-triangle-w', 
     next: 'circle-triangle-e' 
    }, 
    <?php if($jsonEvents !='') { ?> 
    dayClick: function(date, allDay, jsEvent, view) { 
     allday:false; 
     var selectDate = ""; 
     var selectTime = ""; 
     if(view.name !="month") { 
     if(allDay) { 
      selectDate = $.fullCalendar.formatDate(date, 'yyyy-MM-dd'); 
     } 
     else { 
      selectDate = $.fullCalendar.formatDate(date, 'yyyy-MM-dd'); 
      selectTime = $.fullCalendar.formatDate(date, 'hh:mm TT'); 
     } 
     } 
     else { 
     selectDate = $.fullCalendar.formatDate(date, 'yyyy-MM-dd'); 
     } 

     if(selectDate !="") { 
     $("#startDate").val(selectDate); 
     $('#startDate').datepicker('setValue', selectDate); 
     $("#endDate").val(selectDate); 
     $('#endDate').datepicker('setValue', selectDate); 
     } 

     if(selectTime !="") { 
     $("#startTime").val(selectTime); 
     $('#startTime').timepicker({'timeFormat': 'h:i A', 'scrollDefaultNow': true , 'forceRoundTime': true }).on('change', function(ev){ 
      $('#endTime').val(Add30Min($(this).val())); 
      $('#endTime').timepicker({'timeFormat': 'h:i A', 'scrollDefaultNow': true , 'forceRoundTime': true, 'minTime': selectTime}); 
     }); 
     $("#endTime").val(Add30Min(selectTime)); 
     $('#endTime').timepicker({'timeFormat': 'h:i A', 'scrollDefaultNow': true , 'forceRoundTime': true, 'minTime': selectTime}); 
     } 
     $("#eventId").val(""); 
     $("#mainModalHead").text("Add Event"); 
     $("#hidEditEventId").val(""); 
     $("#EventModal").modal(); 
    }, 


    eventClick: function(calEvent, jsEvent, view) { 

     var startDayName = $.fullCalendar.formatDate(calEvent.start, 'ddd'); 
     var startMonthName = $.fullCalendar.formatDate(calEvent.start, 'MMM dd'); 
     var startTime = $.fullCalendar.formatDate(calEvent.start, 'hh:mm TT'); 
     var startDetails = startDayName+", "+startMonthName+", "+startTime; 

     var endDayName = $.fullCalendar.formatDate(calEvent.end, 'ddd'); 
     var endMonthName = $.fullCalendar.formatDate(calEvent.end, 'MMM dd'); 
     var endTime = $.fullCalendar.formatDate(calEvent.end, 'hh:mm TT'); 
     var endDetails = endDayName+", "+endMonthName+", "+endTime; 

     var eventDetails = startDetails+" - "+endDetails; 
     $("#googleEventTitle").text(calEvent.title); 
     $("#googleEventBody").text(eventDetails); 
     $("#eventId").val(calEvent.id); 
     $("#hidEventName").val(calEvent.title); 
     $("#hidStartDate").val($.fullCalendar.formatDate(calEvent.start, 'yyyy-MM-dd')); 
     $("#hidStartTime").val($.fullCalendar.formatDate(calEvent.start, 'hh:mm TT')); 
     $("#hidEndDate").val($.fullCalendar.formatDate(calEvent.end, 'yyyy-MM-dd')); 
     $("#hidEndTime").val($.fullCalendar.formatDate(calEvent.end, 'hh:mm TT')); 
     $("#eventDelete").attr("disabled", false); 
     $("#eventEdit").attr("disabled", false); 
     $("#EditDeleteOperationModal").modal(); 
    }, 

    <?php } ?> 
    weekNumbers : false, 
    weekMode : 'fixed', 
    editable: false, 
    <?php if($jsonEvents !='') { ?> 
     events: <?php echo $jsonEvents; ?>, 
    <?php } ?> 
    timeFormat: 'hh:mm tt', 
    eventColor: '#3c8dbc', 
    eventTextColor: '#ffffff' 
}); 

這裏是json事件列表。

$eventItems = $eventList['items']; //From Google   
$x=0; 
$events = array(); 
$startDateTime =''; 
$endDateTime =''; 
$summary = ''; 
$start = array(); 
$end = array(); 

foreach($eventItems as $item) { 
    if(isset($item['summary'])) { 

     $summary = $item['summary']; 

    } 
    $start = $item['start']; 
    if(isset($start['dateTime'])) { 

     $startDateTime = $start['dateTime']; 

    } 
    else if(isset($start['date'])) { 

     $startDateTime = $start['date']; 

    } 
    $end = $item['end']; 
    if(isset($end['dateTime'])) { 

     $endDateTime = $end['dateTime']; 

    } 
    else if(isset($end['date'])) { 

     $endDateTime = $end['date']; 

    } 

    $events[$x]['id']    = $item['id'];   
    $events[$x]['title']   = $summary; 
    $events[$x]['start']   = $startDateTime; 
    $events[$x]['end']    = $endDateTime; 
    $events[$x]['allDay']   = true; 
    $events[$x]['backgroundColor'] = '#0092D0'; 
    $x++; 
} 
$jsonEvents = json_encode($events);  

}

$jsonEvents返回以下;

string(3742) "[{ 
    "id":"32rsm3h04dsuoikk2r1arfc3m0_20170624T160000Z","title":"Car payment $330.00 28th","start":"2017-06-24T09:00:00-07:00","end":"2017-06-24T10:00:00-07:00","allDay":true,"backgroundColor":"#0092D0"}, 
}]" 

jsonEvents是建立像

$eventList = $cal->events->listEvents(
    'primary', 
    array(
     'timeMin' =>''.$pastEvents.'T01:00:00Z', 
     'timeMax' =>''.$futureEvents.'T23:59:59Z', 
     'singleEvents' => true 
    ) 
); 
$eventItems = $eventList['items']; //From Google   
$x=0; 
$events = array(); 
$startDateTime =''; 
$endDateTime =''; 
$summary = ''; 
$start = array(); 
$end = array(); 

foreach($eventItems as $item) { 
    if(isset($item['summary'])) { 

     $summary = $item['summary']; 

    } 
    $start = $item['start']; 
    if(isset($start['dateTime'])) { 

     $startDateTime = $start['dateTime']; 

    } 
    else if(isset($start['date'])) { 

     $startDateTime = $start['date']; 

    } 
    $end = $item['end']; 
    if(isset($end['dateTime'])) { 

     $endDateTime = $end['dateTime']; 

    } 
    else if(isset($end['date'])) { 

     $endDateTime = $end['date']; 

    } 

    $events[$x]['id']    = $item['id'];   
    $events[$x]['title']   = $summary; 
    $events[$x]['start']   = $startDateTime; 
    $events[$x]['end']    = $endDateTime; 
    $events[$x]['allDay']   = true; 
    $events[$x]['backgroundColor'] = '#0092D0'; 
    $x++; 
} 
$jsonEvents = json_encode($events);  

}

+0

你應該發佈'$ jsonEvents'的內容......我猜沒有'start'和'end'屬性。請參閱[文檔](https://fullcalendar.io/docs/event_data/Event_Object/)。 –

+0

@LouysPatriceBessette我添加了jsonEvents。 – Kray

+0

這就是你如何重新格式化數據......而且看起來是正確的。但我的意思是檢查json內容本身。嘗試'console.log(「<?php echo $ jsonEvents;?>」);'檢查是否有開始和結束時間。也許它在那裏,但沒有正確格式化。它必須是ISO 8601. –

回答

7

,我發現這個問題有關allDay

您在使用start/endallDay之間存在衝突。

documentation

如果一切都失敗了,FullCalendar會嘗試猜測。如果開始或結束值中有一個「T」作爲ISO8601日期字符串的一部分,則allDay將變爲false。否則,這將是事實。

好像「強迫」它true時FullCalendar嘗試將其在此改變到false導致這個問題。

也許可能被報告爲錯誤...因爲沒有錯誤拋出。
至少有一個錯誤會有所幫助。
我建議你提交一個錯誤報告,並看看他們的答案。 ;)


但現在,你的json代看起來很完美。你的問題是數據。
當您使用ISO 8601字符串作爲 start/ end時,請不要將整天設置爲 true

OR將其設置爲true,但只提供一個start日期......和日期而已,沒有時間。
allDay爲真使end超級...不提供它。

這是一個CodePen我用來指出這一點。

+0

mmm ...從CodePen ?? –

+0

我將allday設置爲false,現在它從json數據開始工作。 – Kray

+0

你明白爲什麼?我的意思是......你不知道在哪種情況下它是假的? –