From d167603a54c0ea35188b1ebe6e183931c533f18f Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Tue, 21 Jul 2009 01:12:20 -0400 Subject: [PATCH] Add Horde_Date_Utils::relativeDateTime() for getting relative, natural language representation of datetimes (i.e. 2 minutes ago). --- framework/Date/lib/Horde/Date/Utils.php | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/framework/Date/lib/Horde/Date/Utils.php b/framework/Date/lib/Horde/Date/Utils.php index 2329b567c..230db252f 100644 --- a/framework/Date/lib/Horde/Date/Utils.php +++ b/framework/Date/lib/Horde/Date/Utils.php @@ -62,4 +62,41 @@ class Horde_Date_Utils return $cache[$year][$month]; } + /** + * Returns a relative, natural language representation of a timestamp + * TODO: Wider range of values ... maybe future time as well? + * + * @param integer $timestamp The timestamp + * @param string $format Format to display time if timestamp is more + * then 1 day old. + * + * @return string The relative time (i.e. 2 minutes ago) + */ + public static function relativeDateTime($timestamp, $format = '%x') + { + $delta = time() - $timestamp; + if ($delta < 60) { + return sprintf("%d %s", $delta, ngettext("second ago", "seconds ago", $delta)); + } + $delta = round($delta / 60); + if ($delta < 60) { + return sprintf("%d %s", $delta, ngettext("minute ago", "minutes ago", $delta)); + } + + $delta = round($delta / 60); + if ($delta < 24) { + return sprintf("%d %s", $delta, ngettext("hour ago", "hours ago", $delta)); + } + + if ($delta > 24 && $delta < 48) { + $date = new Horde_Date($timestamp); + return sprintf(_("yesterday at %s"), $date->strftime("%l:%M %p")); + } + + // Default to the user specified date format. + $date = new Horde_Date($timestamp); + + return $date->strftime($GLOBALS['prefs']->getValue('date_format')); + } + } -- 2.11.0