2

我正在使用 facebook graph api 搜索与特定查询匹配的帖子。但我找不到任何有关以 json 格式返回的时间戳的时区的文档。

我的查询是这样,响应 JSON 数组,其中每个元素都有一个时间戳,如下所示:2013-01-15T14:27:49+0000

如何使用这个 timeStamp(没有时区信息)在外部网站上显示 fb 内容:

 <snip>post content </snip> poster-profile image</snip>
   < snip> post created 5 minutes ago </snip> 

编辑:我正在使用 grails 框架进行后端实现。因此使用 php 代码获取时间戳信息不会很容易

编辑 2:我正在使用搜索 api 搜索所有可公开访问的帖子,所以我没有起诉任何访问令牌。

编辑 3:关闭此问题可能与此问题重复

4

2 回答 2

4

查看 Facebook Docs 中的Dates,然后查看ISO 8601 Time Zone

在您的示例2013-01-15T14:27:49+0000中,字符串表示 14:27:49 UTC(因为它后面跟着+0000)。

编辑
让我扩展我的答案。一旦您知道 UTC 时间,就很容易获得要在页面上显示的时差。您可以检查 UTC 时间戳在您的时区对应的时间,然后将其与当前时间进行比较,或者检查当前的 UTC 并计算它与时间戳之间的差异。

如果你不知道怎么做,可以看看Pretty Time Grails 插件

于 2013-01-15T17:09:01.180 回答
1

如果你使用 PHP,你可以使用这个——

// DISPLAYS COMMENT POST TIME AS "1 year, 1 week ago" or "5 minutes, 7 seconds ago", etc...
function time_ago($date,$granularity=2) {
    $date = strtotime($date);
    $difference = time() - $date;
    $periods = array('decade' => 315360000,
        'year' => 31536000,
        'month' => 2628000,
        'week' => 604800, 
        'day' => 86400,
        'hour' => 3600,
        'minute' => 60,
        'second' => 1);

    foreach ($periods as $key => $value) {
        if ($difference >= $value) {
            $time = floor($difference/$value);
            $difference %= $value;
            $retval .= ($retval ? ' ' : '').$time.' ';
            $retval .= (($time > 1) ? $key.'s' : $key);
            $granularity--;
        }
        if ($granularity == '0') { break; }
    }
    return ' post created '.$retval.' ago';      
}

参考

于 2013-01-15T16:43:24.993 回答