Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * this code assumes php >= 5.1.0. if using < 5.1, read
- * php.net/strtotime and change the condition for checking
- * for failure from strtotime()
- *
- * by nate in http://www.php.net/manual/en/ref.datetime.php#80866
- */
- // $t1, $t2: unix times, or strtotime parseable
- // $precision: max number of units to output
- // $abbr: if true, use "hr" instead of "hour", etc.
- function human_date_diff ($t1, $t2, $precision = 6, $abbr = false) {
- if (preg_match('/\D/', $t1) && ($t1 = strtotime($t1)) === false)
- return false;
- if (preg_match('/\D/', $t2) && ($t2 = strtotime($t2)) === false)
- return false;
- if ($t1 > $t2)
- list($t1, $t2) = array($t2, $t1);
- $diffs = array(
- 'year' => 0, 'month' => 0, 'day' => 0,
- 'hour' => 0, 'minute' => 0, 'second' => 0,
- );
- $abbrs = array(
- 'year' => 'yr', 'month' => 'mth', 'day' => 'day',
- 'hour' => 'hr', 'minute' => 'min', 'second' => 'sec'
- );
- foreach (array_keys($diffs) as $interval) {
- while ($t2 >= ($t3 = strtotime("+1 ${interval}", $t1))) {
- $t1 = $t3;
- ++$diffs[$interval];
- }
- }
- $stack = array();
- foreach ($diffs as $interval => $num)
- $stack[] = array($num, ($abbr ? $abbrs[$interval] : $interval) . ($num != 1 ? 's' : ''));
- $ret = array();
- while (count($ret) < $precision && ($item = array_shift($stack)) !== null) {
- if ($item[0] > 0)
- $ret[] = "{$item[0]} {$item[1]}";
- }
- return implode(', ', $ret);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement