Мой первый вопрос: откуда вы берете время / метку времени / дату / время?
В нашей компании мы работаем на нескольких серверах в Германии, а размещенные на них приложения предназначены для Пакистана (GMT +5).мы используем эту функцию, которая использует метку времени Unix для возврата «читабельного» даты: -
/**
* @desc Converts UNIX Time into human readable time like '1 hour', 3 weeks', etc.
* @param number $timestamp
* @return string
*/
function readable_time($timestamp, $num_times = 2) {
// this returns human readable time when it was uploaded
$times = array (
31536000 => 'year', 2592000 => 'month',
604800 => 'week', 86400 => 'day',
3600 => 'hour', 60 => 'minute', 1 => 'second'
);
$now = time ();
$secs = $now - $timestamp;
// Fix so that something is always displayed
if ($secs == 0) $secs = 1;
$count = 0; $time = '';
foreach ( $times as $key => $value ) {
if ($secs >= $key) {
// time found
$s = '';
$time .= floor ( $secs / $key );
if ((floor ( $secs / $key ) != 1)) $s = 's';
$time .= ' ' . $value . $s;
$count ++;
$secs = $secs % $key;
if ($count > $num_times - 1 || $secs == 0) break;
else $time .= ', ';
}
}
return ($time != "") ? $time." ago" : "now";
}
Изменяя переменную $num_times
, мы можем получить что-то вроде «4 месяца, 3 дня, 2».часы, 3 минуты, 15 секунд назад "(в этом примере значение переменной равно 5).
Логически отметка времени поступает из базы данных - в нашем случае MySQL - поэтому мы используем другую функцию, которая принимает отметку времени MySQLи преобразует его в метку времени Unix: -
/**
* @desc Converts UNIX Time into human readable time like '1 hour', 3 weeks', etc.
* @param number $timestamp
* @return string
*/
function RelativeTime($timestamp) {
$difference = time() - $timestamp;
$periods = array("sec", "min", "hour", "day", "week", "month", "years", "decade");
$lengths = array("60", "60", "24", "7", "4.35", "12", "10");
if ($difference > 0) { // this was in the past
$ending = "ago";
} else { // this was in the future
$difference = -$difference;
$ending = "to go";
}
for($j = 0; $difference >= $lengths[$j]; $j++) $difference /= $lengths[$j];
$difference = round($difference);
if($difference != 1) $periods[$j].= "s";
$text = "$difference $periods[$j] $ending";
return $text;
}
Удачи!