Skip to content

Instantly share code, notes, and snippets.

@ozke
Created February 25, 2014 08:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ozke/9205242 to your computer and use it in GitHub Desktop.
Save ozke/9205242 to your computer and use it in GitHub Desktop.
Return time ago in PHP a-la twitter. Comes from http://viralpatel.net/blogs/twitter-like-n-min-sec-ago-timestamp-in-php-mysql/ but applying strtotime to the parameter.
function time_elapsed_string($original) {
$original = strtotime($original);
// array of time period chunks
$chunks = array(
array(60 * 60 * 24 * 365 , 'year'),
array(60 * 60 * 24 * 30 , 'month'),
array(60 * 60 * 24 * 7, 'week'),
array(60 * 60 * 24 , 'day'),
array(60 * 60 , 'hour'),
array(60 , 'min'),
array(1 , 'sec'),
);
$today = time(); /* Current unix time */
$since = $today - $original;
// $j saves performing the count function each time around the loop
for ($i = 0, $j = count($chunks); $i < $j; $i++) {
$seconds = $chunks[$i][0];
$name = $chunks[$i][1];
// finding the biggest chunk (if the chunk fits, break)
if (($count = floor($since / $seconds)) != 0) {
break;
}
}
$print = ($count == 1) ? '1 '.$name : "$count {$name}s";
if ($i + 1 < $j) {
// now getting the second item
$seconds2 = $chunks[$i + 1][0];
$name2 = $chunks[$i + 1][1];
// add second item if its greater than 0
if (($count2 = floor(($since - ($seconds * $count)) / $seconds2)) != 0) {
$print .= ($count2 == 1) ? ', 1 '.$name2 : " $count2 {$name2}s";
}
}
return $print;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment