كود PHP:
function unix_time2text($unix_time, $time = null) {
if (is_int($unix_time) == false) {
return null;
}
if ($time == null) {
$time = time();
} else {
if (is_int($time) == false) {
return null;
}
}
// $time must be bigger than $unix_time..
if ($time < $unix_time) {
return null;
}
$seconds = $time - $unix_time;
// by seconds..
define('MINUTE', 60);
define('HOUR', 3600); // $minute * 60
define('DAY', 86400); // $hour * 24
define('WEEK', 604800); // $day * 7
// for the current month..
define('MONTH', (DAY * date('t', $time)));
define('YEAR', ((date('L', $time) == 1) ? 31622400 : 31536000));
// 1 : ($day * 29) + ((4 * ($day * 30)) + (7 * ($day * 31)))
// 0 : ($day * 28) + ((4 * ($day * 30)) + (7 * ($day * 31)))
switch (true) {
// seconds
case ($seconds == 0) :
$text = 'this second';
break;
case ($seconds == 1) :
$text = '1 second';
break;
case ($seconds < MINUTE) :
$text = $seconds.' seconds';
break;
// minutes
case ($seconds < 120) : // $minute * 2
$text = '1 minute';
break;
case ($seconds < HOUR) :
$text = round($seconds / MINUTE).' minutes';
break;
// hours
case ($seconds < 7200) : // $hour * 2
$text = '1 hour';
break;
case ($seconds < DAY) :
$text = round($seconds / HOUR).' hours';
break;
// days
case ($seconds < 172800) : // $day * 2
$text = '1 day';
break;
case ($seconds < WEEK) :
$text = round($seconds / DAY).' days';
break;
// weeks
case ($seconds < 1209600) : // $week * 2
$text = '1 week';
break;
case ($seconds < MONTH) :
$text = round($seconds / WEEK).' weeks';
break;
// months
case ($seconds < (MONTH * 2)) :
$text = '1 month';
break;
case ($seconds < YEAR) :
$text = round($seconds / MONTH).' months';
break;
// years
case ($seconds < (YEAR * 2)) :
$text = '1 year';
break;
default :
$text = round($seconds / YEAR).' years';
break;
}
return $text;
}
وهنا مجموعة من التجارب ..
كود PHP:
date_default_timezone_set('asia/riyadh');
function u2t($unix_time) {
$result = unix_time2text($unix_time);
if ($result == null) {
echo "null..\n";
} else {
echo '['.date('d-m-Y h:i:s a', $unix_time).'] '.$result.(($result == 'this second') ? '' : ' ago')."..\n";
}
}
function u2te($unix_time, $time) {
$result = unix_time2text($unix_time, $time);
if ($result == null) {
echo "null..\n";
} else {
echo '[from ['.date('d-m-Y h:i:s a', $unix_time).'] to ['.date('d-m-Y h:i:s a', $time).']] '.(($result == 'this second') ? '0 seconds' : $result)."..\n";
}
}
echo '<pre>';
// seconds
u2t(time());
u2t(time() - 01);
u2t(time() - 30);
u2t(time() - 59);
echo "\n";
// minutes
u2t(time() - 60);
u2t(time() - (60 * 30));
u2t(time() - (60 * 59));
echo "\n";
// hours
u2t(time() - (60 * 60));
u2t(time() - (60 * 60 * 12));
u2t(time() - (60 * 60 * 23));
echo "\n";
// days
u2t(time() - (60 * 60 * 24));
u2t(time() - (60 * 60 * 24 * 2));
u2t(time() - (60 * 60 * 24 * 6));
echo "\n";
// weeks
u2t(time() - (60 * 60 * 24 * 7));
u2t(time() - (60 * 60 * 24 * 7 * 2));
u2t(time() - (60 * 60 * 24 * 7 * 3));
u2t(time() - (60 * 60 * 24 * 7 * 4));
echo "\n";
// months
u2t(time() - (60 * 60 * 24 * date('t')));
u2t(time() - (60 * 60 * 24 * date('t') * 02));
u2t(time() - (60 * 60 * 24 * date('t') * 06));
u2t(time() - (60 * 60 * 24 * date('t') * 11));
echo "\n";
// years
u2t(time() - (60 * 60 * 24 * date('t') * 12));
u2t(time() - (60 * 60 * 24 * date('t') * 12 * 02));
u2t(time() - (60 * 60 * 24 * date('t') * 12 * 05));
u2t(time() - (60 * 60 * 24 * date('t') * 12 * 10));
echo "\n\n";
// extra parameter.. (first_parameter < second_parameter)
u2te(mktime(0, 0, 0, 1, 1, 2004), mktime(0, 0, 0, 1, 1, 2004));
u2te(mktime(10, 10, 40, 7, 7, 1990), mktime(10, 10, 60, 7, 7, 1990));
u2te(mktime(10, 10, 40, 7, 7, 1993), mktime(10, 12, 60, 7, 7, 1993));
u2te(mktime(10, 10, 40, 7, 7, 2005), mktime(14, 10, 60, 7, 21, 2005));
u2te(mktime(10, 10, 40, 7, 7, 2002), mktime(14, 10, 60, 7, 7, 2002));
u2te(mktime(0, 0, 0, 7, 7, 2007), mktime(0, 0, 0, 12, 6, 2007));
u2te(mktime(0, 0, 0, 1, 1, 2003), mktime(0, 0, 0, 3, 3, 2006));
echo '</pre>';