TwitterAPIで取得したツイートの投稿時間を「○分前」といった相対表記に変換する方法。


Twitterではツイートの投稿時間の表示方法として、「○分前に投稿」といったツイートが投稿された時間からの経過時間表記を標準としています。
んで、TwitterAPIで取得したツイートの投稿時間を投稿からの経過時間で表示する方法です。

以下PHPで。

    /*
     *  投稿時間からの経過時間を返す
     *  @param string $created_at 投稿時間
     *  
     */
    function getPassedTime($created_at) {
        $now = date_create(date('Y-m-d H:i:s'));//(*1)
        $created = date_create(date('Y-m-d H:i:s', strtotime($created_at)));//(*2)
        $passed = date_diff($now, $created);

        switch (true) :
            case ($passed->y):return $passed->y . '年前';
            case ($passed->m):return $passed->m . 'ヶ月前';
            case ($passed->w):return $passed->w . '週間前';
            case ($passed->d):return $passed->d . '日前';
            case ($passed->h):return $passed->h . '時間前';
            case ($passed->i):return $passed->i . '分前';
            default:
                return $passed->s . "秒前";
        endswitch;

    }

こんな感じ。

補足:
記事の都合上、(*1)で現在時間を第二引数無しのdateで取ってしまってるので、ローカルの時計と、ローカルのタイムゾーン(Asia/Tokyo)が反映されるため、(*2)でちょっと面倒なことになってるけれど…。
現在時間もヘッダから拾ってきて、それぞれGMTな現在時間・投稿時間を直にdate_createすれば、もう少しシンプルになるはず。(タイムゾーンを意識する必要がないし、結果となる経過時間がローカルの時間に依存しないから。)

どうでも良いけれど…。

正直、個人的には2014/01/01 02:15:01 JST みたいな時間表示の方が、データの取得時間を意識する必要がないので好きなので「めんどくさいなー」と思ったのですが、↑の書いてるうちに「あぁ。そうか。」と。
補足で書いているように、相対表示、やり方によっては、タイムゾーンを意識する必要がないのはメリットかもれないかな〜と。世界広いし。
どちらにしても、相対表記のみでは情報不足なので、完全な時間表示は必要になるけれど。

スポンサード リンク

公開日:2014年11月16日
タグ:, , , ,