繁体   English   中英

Facebook API PHP-发布“ created_time”数据无法正确显示

[英]Facebook API PHP - Posts 'created_time' data not displaying properly

我正在使用PHP开发Facebook应用程序。 该应用程序通过Facebook API显示已登录用户的最新帖子。 在检索每个帖子的created_time时,我发现它要么不显示任何内容,要么仅显示1970-01-01T00:00:00+0000 (这可以在下面的图片中看到。)即使我使用DateTime它也保持DateTime

如使用Facebook的Graph API Explorer所示,它应返回类似2016-01-31T16:31:26+0000的内容。

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

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

所有信息均从Facebook提取,并处于foreach循环内。 它遍历每个帖子,知道放置在什么地方,每个created_time值都定为$key['created_time']

前端示例 前端示例

Graph API资源管理器 Graph API Explorer示例

这是我的代码:

<?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>";
        }
    }

问题是,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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM