Facebook API PHP - 帖子' created_time'数据无法正常显示

时间:2016-02-03 17:28:17

标签: php facebook facebook-graph-api

我正在使用PHP制作Facebook应用程序。通过Facebook API,应用程序显示登录用户的最新帖子。在检索每个帖子的created_time时,我发现它既没有显示任何内容,也没有显示1970-01-01T00:00:00+0000。 (这可以在下面的图片中看到。)即使我使用DateTime,这也是如此。

应该返回类似2016-01-31T16:31:26+0000的内容,如使用Facebook的图谱API资源管理器所示。

不知道如何纠正这个问题,我能够让它以正确的格式显示:

$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 个答案:

答案 0 :(得分:1)

问题是facebook时间函数没有给出从strtotime工作所需的标准数字形式的时间。这是我在网上找到的一个函数,它将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

相关问题