101 lines
2.3 KiB
PHP
101 lines
2.3 KiB
PHP
<?php
|
|
/**
|
|
* @package FOF
|
|
* @copyright Copyright (c)2010-2021 Nicholas K. Dionysopoulos / Akeeba Ltd
|
|
* @license GNU General Public License version 2, or later
|
|
*/
|
|
|
|
namespace FOF30\Cli\Traits;
|
|
|
|
defined('_JEXEC') || die;
|
|
|
|
/**
|
|
* Allows the developer to show the relative time difference between two timestamps.
|
|
*
|
|
* @package FOF30\Cli\Traits
|
|
*/
|
|
trait TimeAgoAware
|
|
{
|
|
/**
|
|
* Returns the relative time difference between two timestamps in a human readable format
|
|
*
|
|
* @param int $referenceTimestamp Timestamp of the reference date/time
|
|
* @param int|null $currentTimestamp Timestamp of the current date/time. Null for time().
|
|
* @param string $timeUnit Time unit. One of s, m, h, d, or y.
|
|
* @param bool $autoSuffix Add "ago" / "from now" suffix?
|
|
*
|
|
* @return string For example, "10 seconds ago"
|
|
*/
|
|
protected function timeAgo($referenceTimestamp = 0, $currentTimestamp = null, $timeUnit = '', $autoSuffix = true)
|
|
{
|
|
if (is_null($currentTimestamp))
|
|
{
|
|
$currentTimestamp = time();
|
|
}
|
|
|
|
// Raw time difference
|
|
$raw = $currentTimestamp - $referenceTimestamp;
|
|
$clean = abs($raw);
|
|
|
|
$calcNum = [
|
|
['s', 60],
|
|
['m', 60 * 60],
|
|
['h', 60 * 60 * 60],
|
|
['d', 60 * 60 * 60 * 24],
|
|
['y', 60 * 60 * 60 * 24 * 365],
|
|
];
|
|
|
|
$calc = [
|
|
's' => [1, 'second'],
|
|
'm' => [60, 'minute'],
|
|
'h' => [60 * 60, 'hour'],
|
|
'd' => [60 * 60 * 24, 'day'],
|
|
'y' => [60 * 60 * 24 * 365, 'year'],
|
|
];
|
|
|
|
$effectiveTimeUnit = $timeUnit;
|
|
|
|
if ($timeUnit == '')
|
|
{
|
|
$effectiveTimeUnit = 's';
|
|
|
|
for ($i = 0; $i < count($calcNum); $i++)
|
|
{
|
|
if ($clean <= $calcNum[$i][1])
|
|
{
|
|
$effectiveTimeUnit = $calcNum[$i][0];
|
|
$i = count($calcNum);
|
|
}
|
|
}
|
|
}
|
|
|
|
$timeDifference = floor($clean / $calc[$effectiveTimeUnit][0]);
|
|
$textSuffix = '';
|
|
|
|
if ($autoSuffix == true && ($currentTimestamp == time()))
|
|
{
|
|
if ($raw < 0)
|
|
{
|
|
$textSuffix = ' from now';
|
|
}
|
|
else
|
|
{
|
|
$textSuffix = ' ago';
|
|
}
|
|
}
|
|
|
|
if ($referenceTimestamp != 0)
|
|
{
|
|
if ($timeDifference == 1)
|
|
{
|
|
return $timeDifference . ' ' . $calc[$effectiveTimeUnit][1] . ' ' . $textSuffix;
|
|
}
|
|
|
|
return $timeDifference . ' ' . $calc[$effectiveTimeUnit][1] . 's ' . $textSuffix;
|
|
}
|
|
|
|
return '(no reference timestamp was provided).';
|
|
}
|
|
|
|
}
|