Back to Date class

Method relative

public static string
relative
(mixed $date, mixed $unit = null, mixed $time = null, mixed $format = null)
Function to convert a static time into a relative measurement
Parameters
  • string $date The date to convert
  • string $unit The optional unit of measurement to return if the value of the diff is greater than one
  • string $time An optional time to compare to, defaults to now
  • string $format An optional format for the HTMLHelper::date output
Returns
  • string The converted time string
Since
  • 2.5
Class: Date
Project: Joomla

Method relative - Source code

/**
 * Function to convert a static time into a relative measurement
 *
 * @param   string  $date    The date to convert
 * @param   string  $unit    The optional unit of measurement to return
 *                           if the value of the diff is greater than one
 * @param   string  $time    An optional time to compare to, defaults to now
 * @param   string  $format  An optional format for the HTMLHelper::date output
 *
 * @return  string  The converted time string
 *
 * @since   2.5
 */
public static function relative($date, $unit = null, $time = null, $format = null)
{
    if ($time === null) {
        // Get now
        $time = new DateHelper('now');
    }
    // Get the difference in seconds between now and the time
    $diff = strtotime($time) - strtotime($date);
    // Less than a minute
    if ($diff < 60) {
        return Text::_('JLIB_HTML_DATE_RELATIVE_LESSTHANAMINUTE');
    }
    // Round to minutes
    $diff = round($diff / 60);
    // 1 to 59 minutes
    if ($diff < 60 || $unit === 'minute') {
        return Text::plural('JLIB_HTML_DATE_RELATIVE_MINUTES', $diff);
    }
    // Round to hours
    $diff = round($diff / 60);
    // 1 to 23 hours
    if ($diff < 24 || $unit === 'hour') {
        return Text::plural('JLIB_HTML_DATE_RELATIVE_HOURS', $diff);
    }
    // Round to days
    $diff = round($diff / 24);
    // 1 to 6 days
    if ($diff < 7 || $unit === 'day') {
        return Text::plural('JLIB_HTML_DATE_RELATIVE_DAYS', $diff);
    }
    // Round to weeks
    $diff = round($diff / 7);
    // 1 to 4 weeks
    if ($diff <= 4 || $unit === 'week') {
        return Text::plural('JLIB_HTML_DATE_RELATIVE_WEEKS', $diff);
    }
    // Over a month, return the absolute time
    return HTMLHelper::_('date', $date, $format);
}