time — PHP timeAgo, чтобы вернуться через X дней, если отметка времени в будущем

У меня есть эта функция PHP, которая возвращает давно из отметка времени.

function time_ago($time) {
$periods = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year', 'decade');
$lengths = array('60', '60', '24', '7', '4.35', '12', '10');
$now = time();
$difference     = $now - $time;
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference != 1) {
$periods[$j] .= 's';
}
return $difference . ' ' . $periods[$j] . ' ago';
}

Теперь, если отметка времени больше, чем СЕЙЧАС, это вернется47 лет назад».

Как заставить его вернуться «Через 3 дня, 5 часов, 16 минут» если отметка времени больше, чем СЕЙЧАС?

Благодарю.

0

Решение

function time_ago($time) {
$periods = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year', 'decade');
$lengths = array('60', '60', '24', '7', '4.35', '12', '10');
$now = time();
// if($now > $time) {
$difference     = $now - $time;
if ($now < $time) {
$difference = $time - $now;
}
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference != 1) {
$periods[$j] .= 's';
}
//if ($now > $time) {
$text = $difference . ' ' . $periods[$j] . ' ago';
} elseif ($now < $time) {
$text = 'In ' . $difference . ' ' . $periods[$j];
}

return $text;
}

Это может сработать. Хотя я не вижу цикла для добавления разных периодов, просто первое совпадение. И даже тогда вы, вероятно, забыли разорвать петлю после матча.

Редактировать: Вам, вероятно, лучше использовать функцию DateTime :: diff, которая в сочетании с функцией «format» автоматизирует этот процесс для вас, более точно и эффективно (поскольку ваш цикл неполон и он обрабатывает только последнюю итерацию в массиве )

http://php.net/manual/en/datetime.diff.php

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]