tags:

views:

1102

answers:

2

Published Date returned from Twitter Search API Atom Feed as 2008-11-03T21:30:06Z which needs to be converted to "X seconds/minutes/hours/days ago" for showing how long ago twitter messages were posted.

Think this can be done with php date() function using DATE_ATOM value?

+1  A: 

strtotime will handle that date format, giving you a unix timestamp. You can then follow the algorithms on How do I calculate relative time? to get your result.

Dave Marshall
+3  A: 
function time_since($your_timestamp) {
    $unix_timestamp = strtotime($your_timestamp);
    $seconds = time() - $unix_timestamp;
    $minutes = 0;
    $hours = 0;
    $days = 0;
    $weeks = 0;
    $months = 0;
    $years = 0;
    if ( $seconds == 0 ) $seconds = 1;
    if ( $seconds> 60 ) {
     $minutes =  $seconds/60;
    } else {
     return add_s($seconds,'second');
    }

    if ( $minutes >= 60 ) {
     $hours = $minutes/60;
    } else {
     return add_s($minutes,'minute');
    }

    if ( $hours >= 24) {
     $days = $hours/24;
    } else {
     return add_s($hours,'hour');
    }

    if ( $days >= 7 ) {
     $weeks = $days/7;
    } else {
     return add_s($days,'day');
    }

    if ( $weeks >= 4 ) {
     $months = $weeks/4;
    } else {
     return add_s($weeks,'week');
    }

    if ( $months>= 12 ) {
     $years = $months/12;
     return add_s($years,'year');
    } else {
     return add_s($months,'month');
    }

}

function add_s($num,$word) {
    $num = floor($num);
    if ( $num == 1 ) {
     return $num.' '.$word.' ago';
    } else {
     return $num.' '.$word.'s ago';
    }
}

echo time_since('2008-11-03T21:30:06Z');
Jack
Thanks Jack. Everything I needed combined into a couple of functions. Cheers!