从 Google 日历 JSON 编码中检索事件时不会呈现事件

Events are not rendered when retrieving them from Google Calendar JSON encoded

我正在使用 CodeIgniter 构建一个带有 Fullcalendar 的应用程序,我正在尝试集成 Google 日历。

我在使用 JS 时遇到了问题,我更喜欢使用 PHP,所以我有一个名为 Calendar.php 的控制器来调用 Google 日历 API,获取主日历并列出事件。

编辑:这就是我现在得到的:

对象看起来像这样

获取http://localhost/admin/calendar/gcal...?start=2016-09-25&end=2016-11-06&_=1476324367596

200 正常 2.68s

回应

[{"title":"lobna elatreby @nrc","type":"gcal","calendar_id":356,"notes":"notes" ,"start":"2010-03-23T14 :30:00-04:00","end":"2010-03-23T15:30:00-04:00"},{"title":"Biology Test 1","type":"gcal","calendar_id" :356,"notes":"notes","start":"2013-02-08T18:30:00-05:00","end":"2013-02-08T19: 30:00-05:00"}]

我使用了 json_encode(['events'=>$eventsArr]) 但我得到了同样的错误

弃用警告:不推荐使用 moment().zone,请改用 moment().utcOffset。 参数:2010-03-23T14:30:00-04:00

deprecate/fullcalendar/moment.min.js:309:98......

TypeError: t.start 未定义

函数C(t){null==t.allDay&&(t.allDay=!(t.start.hasTime()||t.end&&t.end.hasTime...

我尝试下载并更新 Moment.js,我尝试更改日期格式... Google 日历 API "The time, as a combined date-time value (formatted according to RFC3339). A time zone offset is required unless a time zone is explicitly specified in timeZone."

您从服务器 return 获取的内容无效 JSON 并且问题与日期无关。看看您发布的屏幕截图,其中包含以下内容:

{"events": {"description":"lobna elatreby @nrc", "start": "2010-03-23T14:30:00-04:00", "end": "2010-03-23T15:30:00-04:00"}}{"events":...

您正在设置多个 events,这是因为 gcalendar_events 函数上的代码。您需要将代码更新为(看一下方法的末尾:

function gcalendar_events() {
    $client = $this->getClient();

    $client->addScope(Google_Service_Calendar::CALENDAR);
    // $client->setRedirectUri(site_url('calendar/gcalendar'));
    //$client->setAccessType('offline'); need calendar events to appear even if not logged in to google
    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
        $client->setAccessToken($_SESSION['access_token']);
        $access_token = $_SESSION['access_token'];

        $service = new Google_Service_Calendar($client);
        $id = 'primary';   
        $calendar = new Google_Service_Calendar_Calendar();
        $calendar = $service->calendars->get('primary');

        $event = new Google_Service_Calendar_Event();

        $events = $service->events->listEvents($id);

        $eventsArr = [];

        foreach ($events->getItems() as $event) {          
            // Append a new evet to the $eventsArr
            $eventsArr[] = array()
                'description' => $event->getSummary(),               
                'start'=> $event->getStart()->dateTime,                   
                'end' =>  $event->getEnd()->dateTime,
            ); 
        }  

        // Return a single `events` with all the `$eventsArr`
        echo json_encode(['events' => $eventsArr]);
    }
}

这应该return类似于:

{"events": [{"description":"lobna elatreby @nrc", "start": "2010-03-23T14:30:00-04:00", "end": "2010-03-23T15:30:00-04:00"}, {"description": "...", "start": ...}]