2016-02-03 42 views
1

我正在使用PHP製作Facebook應用程序。通過Facebook API,應用程序顯示登錄用戶的近期帖子。當談到檢索每個帖子的created_time時,我發現它沒有顯示任何內容或僅顯示1970-01-01T00:00:00+0000。 (這可以在下面的圖片中看到。)即使當我使用DateTime時,也是如此。Facebook API PHP - Posts'cre​​ated_time'數據顯示不正確

它應該返回類似2016-01-31T16:31:26+0000的東西,如使用Facebook的Graph API Explorer所示。

不知道如何解決這個問題,我能得到它的正確的格式,像這樣顯示:

$ts = strtotime($key['created_time']); 
$myTime = gmdate(DATE_ISO8601, $ts); 

所有的信息是從Facebook的拉動,是一個foreach循環中。它通過每一個職位且知道放哪裏,每個created_time值吃飽爲$key['created_time']

前端實例 A front-end example

圖形API瀏覽器 A Graph API Explorer example

這是我的代碼:

<?php 

    // Getting all posts published by user 
    try { 
     $posts_request = $fb->get('/me/posts?fields=id,created_time,message,link,picture,name&limit=7'); 
     $posts_response = $posts_request->getGraphEdge(); 
    } catch(Facebook\Exceptions\FacebookResponseException $e) { 
     // When Graph returns an error 
     echo 'Graph returned an error: ' . $e->getMessage(); 
     exit; 
    } catch(Facebook\Exceptions\FacebookSDKException $e) { 
     // When validation fails or other local issues 
     echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
     exit; 
    } 


    if ($fb->next($posts_response)) { 
     $total_posts = $posts_response->asArray(); 
     $totalPosts = count($total_posts); 

     // Form - Post 
      echo "<p><strong>* With this text box below, you can post to your Facebook Profile about your experience using this application if you wish. Once submitted, this post will then also appear in the list of your other posts below.</strong></p>"; 
      echo "<form action='posttouserstimeline.php' method='post'>"; 
      echo "<textarea name='description' class='posts'></textarea>"; 
      echo "<br><br>"; 
      echo "<input type='submit' class='webbutton' value='Post to Facebook'>"; 
      echo "</form>"; 
      echo "<br>"; 
      echo "<p><strong>* Below are your '5' most resent posts, from your Facebook Profile</strong></p>"; 

      //$date = new DateTime($key['created_time']); 

     foreach($total_posts as $key) { 

      $ts = strtotime($key['created_time']); 
      $myTime = gmdate(DATE_ISO8601, $ts); 

      echo "Time and Date of Post: ".$myTime."<br>"; 
      echo "<img class='postsprofile' alt='profilepic' src='".$picture['url']."'/> <a href='https://facebook.com/".$profile['id']."' target='_blank'>".$profile['name']."</a><br>"; 
      echo $key['message'].'<br><br>'; 
      echo "<a href='".$key['link']."' target='_blank'><img class='postsprofile' alt='".$key['name']."' src='".$key['picture']."'/></a><br><hr><br>"; 

      //echo "<img class='postsprofile' alt='".$key['name']."' src='".$key['picture']."'/><br>"; 
      //echo "<a href='".$key['link']."' target='_blank'>".$key['link']."</a><br><hr><br>"; 
     } 
    } 

回答

1

問題是Facebook時間函數沒有給出標準數字格式所需的時間,以便從時間通話開始工作。這是我在網上找到的一個功能,它將facebook時間轉換爲我們習慣使用的標準數字形式的時間。

var fuzzyFacebookTime = (function(){ 

    fuzzyTime.defaultOptions={ 
    // time display options 
    relativeTime : 48, 
    // language options 
    monthNames : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 
    amPm : ['AM', 'PM'], 
    ordinalSuffix : function(n) {return ['th','st','nd','rd'][n<4 || (n>20 && n % 10<4) ? n % 10 : 0]} 
    } 

    function fuzzyTime (timeValue, options) { 

    var options=options||fuzzyTime.defaultOptions, 
     date=parseDate(timeValue), 
     delta=parseInt(((new Date()).getTime()-date.getTime())/1000), 
     relative=options.relativeTime, 
     cutoff=+relative===relative ? relative*60*60 : Infinity; 

    if (relative===false || delta>cutoff) 
     return formatTime(date, options)+' '+formatDate(date, options); 

    if (delta<60) return 'less than a minute ago'; 
    var minutes=parseInt(delta/60 +0.5); 
    if (minutes <= 1) return 'about a minute ago'; 
    var hours=parseInt(minutes/60 +0.5); 
    if (hours<1) return minutes+' minutes ago'; 
    if (hours==1) return 'about an hour ago'; 
    var days=parseInt(hours/24 +0.5); 
    if (days<1) return hours+' hours ago'; 
    if (days==1) return formatTime(date, options)+' yesterday'; 
    var weeks=parseInt(days/7 +0.5); 
    if (weeks<2) return formatTime(date, options)+' '+days+' days ago'; 
    var months=parseInt(weeks/4.34812141 +0.5); 
    if (months<2) return weeks+' weeks ago'; 
    var years=parseInt(months/12 +0.5); 
    if (years<2) return months+' months ago'; 
    return years+' years ago'; 
    } 

    function parseDate (str) { 
    var v=str.replace(/[T\+]/g,' ').split(' '); 
    return new Date(Date.parse(v[0] + " " + v[1] + " UTC")); 
    } 

    function formatTime (date, options) { 
    var h=date.getHours(), m=''+date.getMinutes(), am=options.amPm; 
    return (h>12 ? h-12 : h)+':'+(m.length==1 ? '0' : '')+m+' '+(h<12 ? am[0] : am[1]); 
    } 

    function formatDate (date, options) { 
    var mon=options.monthNames[date.getMonth()], 
     day=date.getDate(), 
     year=date.getFullYear(), 
     thisyear=(new Date()).getFullYear(), 
     suf=options.ordinalSuffix(day); 

    return mon+' '+day+suf+(thisyear!=year ? ', '+year : ''); 
    } 

    return fuzzyTime; 

}()); 

來源: http://tipsandtricks.nogoodatcoding.com/2011/02/facebook-createdtime-format-in-json.html