| | 533 | } |
| | 534 | |
| | 535 | /** |
| | 536 | * Works out the time since the entry post, takes a an argument in unix time or datetime |
| | 537 | */ |
| | 538 | function time_since($original, $stop = 'minute') |
| | 539 | { |
| | 540 | if (!is_int($original)) |
| | 541 | { |
| | 542 | $ymdhms = array(); |
| | 543 | $tok = strtok($original, '- :'); |
| | 544 | while ($tok !== false) |
| | 545 | { |
| | 546 | $ymdhms[] = $tok; |
| | 547 | $tok = strtok('- :'); |
| | 548 | } |
| | 549 | $original = mktime($ymdhms[3],$ymdhms[4],$ymdhms[5],$ymdhms[1],$ymdhms[2],$ymdhms[0]); |
| | 550 | } |
| | 551 | |
| | 552 | // array of time period chunks |
| | 553 | $chunks = array( |
| | 554 | array(60 * 60 * 24 * 365 , 'year'), |
| | 555 | array(60 * 60 * 24 * 30 , 'month'), |
| | 556 | array(60 * 60 * 24 * 7, 'week'), |
| | 557 | array(60 * 60 * 24 , 'day'), |
| | 558 | array(60 * 60 , 'hour'), |
| | 559 | array(60 , 'minute'), |
| | 560 | array(1 , 'second'), |
| | 561 | ); |
| | 562 | |
| | 563 | $today = time(); /* Current unix time */ |
| | 564 | $since = abs($today - $original); |
| | 565 | |
| | 566 | $print = null; |
| | 567 | for ($i = 0, $j = count($chunks); $i < $j; $i++) |
| | 568 | { |
| | 569 | $seconds = $chunks[$i][0]; |
| | 570 | $name = $chunks[$i][1]; |
| | 571 | if (($count = floor($since / $seconds)) != 0) |
| | 572 | { |
| | 573 | $print.= ($count == 1) ? '1 '.l10n($name).' ' : $count.' '.l10n($name.'s').' '; |
| | 574 | $since-= $count*$seconds; |
| | 575 | } |
| | 576 | if ($name == $stop) |
| | 577 | { |
| | 578 | break; |
| | 579 | } |
| | 580 | } |
| | 581 | |
| | 582 | if ($today > $original) |
| | 583 | { |
| | 584 | $print = sprintf(l10n('%s ago'), $print); |
| | 585 | } |
| | 586 | else |
| | 587 | { |
| | 588 | $print = sprintf(l10n('%s in the future'), $print); |
| | 589 | } |
| | 590 | |
| | 591 | return $print; |