Revision: 61614
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 27, 2012 08:06 by uberdragon
Initial Code
function timeBetween($start,$end) {
if (empty($start) || empty($end)) { return; }
else return timeSince(strtotime($start),strtotime($end),2,'short');
}
/**
* Get time difference in human readable format
* $start is start time (unix time), $end is end time (unix time), $units is numeric and defines how many time units to display
*/
function timeSince($start,$end='',$units=2,$words='long') { // $start and $end should be Unix time() format
switch($words) {
case 'long':
$unitName = array( // Change this array to reflect what should be displayed as unit names and pluralization append
'year' => 'year',
'month' => 'month',
'week' => 'week',
'day' => 'day',
'hour' => 'hour',
'minute' => 'minute',
'second' => 'second',
'plural' => 's'
);
break;
case 'short':
$unitName = array( // Change this array to reflect what should be displayed as unit names and pluralization append
'year' => 'yr',
'month' => 'mo',
'week' => 'wk',
'day' => 'day',
'hour' => 'hr',
'minute' => 'min',
'second' => 'sec',
'plural' => 's'
);
break;
}
// Common time periods as an array of arrays
$periods = array(
array(60 * 60 * 24 * 365 , $unitName['year']),
array(60 * 60 * 24 * 30 , $unitName['month']),
array(60 * 60 * 24 * 7, $unitName['week']),
array(60 * 60 * 24 , $unitName['day']),
array(60 * 60 , $unitName['hour']),
array(60 , $unitName['minute']),
array(1 , $unitName['second']),
);
$end = (!empty($end))?$end:time(); // if no end timestamp given use the current one for end date
$since = $end - $start; // Find the difference of time between now and the past
// Loop around the periods, starting with the biggest
for ($i = 0, $j = count($periods); $i < $j; $i++){
$seconds = $periods[$i][0];
$name = $periods[$i][1];
// Find the biggest whole period
if (($count = floor($since / $seconds)) != 0){
break;
}
}
$output = ($count == 1) ? '1 '.$name : "$count {$name}s";
$deducted = ($seconds * $count);
for($z = 1, $j = count($periods); $z < $j; $z++) {
if ($units > $z && $i + $z < $j){
// Retrieving the next requested relevant period
$seconds = $periods[$i + $z][0];
$name = $periods[$i + $z][1];
// Only show it if it's greater than 0
if (($count = floor(($since - $deducted) / $seconds)) != 0){
$deducted = $deducted+($seconds * $count);
$output .= ($count == 1) ? ', 1 '.$name : ", {$count} {$name}{$unitName['plural']}";
}
}
}
return $output;
}
/**
* Identical to timeSince except your end time should be greater than your start time
*/
function timeUntil($end,$start='',$units=2) {
$start = (!empty($start))?$start:time();
return timeSince($start,$end,$units);
}
Initial URL
Initial Description
Get time difference in human readable format
Initial Title
timeSince() PHP function
Initial Tags
Initial Language
PHP