Reputation: 409
I am making a Facebook application using PHP. Through the Facebook API the application displays the recent posts from the logged in user. When it came to working on retrieving the created_time
of each post, I found that it either did not display anything or only displayed 1970-01-01T00:00:00+0000
. (This can be seen in the picture below.) This held even when I used DateTime
.
It should return something like 2016-01-31T16:31:26+0000
, as seen by using Facebook's Graph API Explorer.
Not sure how to correct this, I was able to get it to display in the correct format like so:
$ts = strtotime($key['created_time']);
$myTime = gmdate(DATE_ISO8601, $ts);
All of the information is pulled from Facebook, and is within a foreach
loop. It goes through each post and knows what to put where, and each created_time
value is sated as $key['created_time']
This is my code:
<?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>";
}
}
Upvotes: 1
Views: 1096
Reputation: 670
The problem is the facebook time function does not give the time in the standard numeric form needed for the call from strtotime to work. Here is a function I found online that converts facebook time to the time in the standard numeric form we are used to.
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;
}());
Source: http://tipsandtricks.nogoodatcoding.com/2011/02/facebook-createdtime-format-in-json.html
Upvotes: 1