Как отобразить «12 минут назад» и т. Д. На веб-странице PHP? [закрыто]

Может кто-нибудь сказать мне, как я могу отобразить сообщение о состоянии, например, «12 секунд назад» или «5 минут назад» и т. Д. На веб-странице?

31 php
20.08.2008 19:59:57
Это было рассмотрено (хотя и с большим вниманием к C #) в этой теме .
Ian Nelson 20.08.2008 20:05:18
Этот вопрос ранее задавался , пример кода в ответах должен быть довольно легко преобразовать в PHP.
Wedge 20.08.2008 20:07:06
Есть хороший плагин jquery: timeago.js
Loïc MICHEL 27.04.2013 04:46:05
3 ОТВЕТА
РЕШЕНИЕ

Вот код PHP для того же:

function time_since($since) {
    $chunks = array(
        array(60 * 60 * 24 * 365 , 'year'),
        array(60 * 60 * 24 * 30 , 'month'),
        array(60 * 60 * 24 * 7, 'week'),
        array(60 * 60 * 24 , 'day'),
        array(60 * 60 , 'hour'),
        array(60 , 'minute'),
        array(1 , 'second')
    );

    for ($i = 0, $j = count($chunks); $i < $j; $i++) {
        $seconds = $chunks[$i][0];
        $name = $chunks[$i][1];
        if (($count = floor($since / $seconds)) != 0) {
            break;
        }
    }

    $print = ($count == 1) ? '1 '.$name : "$count {$name}s";
    return $print;
}

Функция принимает количество секунд в качестве ввода и выводит текст, такой как:

  • 10 секунд
  • 1 минута

и т.д

69
20.08.2008 20:02:48
Да, и не забудьте заменить эти умножения на реальные значения, чтобы они не вычислялись при каждом
AntonioCS 23.08.2009 21:07:39
Поскольку мне было любопытно, замена последовательностей умножения оцененными продуктами была на ~ 1,2% быстрее.
Mike B 24.08.2009 01:04:06
Это показывает только 33 minutesто, что я менял дату и время тоже
Erik 24.02.2013 18:18:02
@ErikEdgren У меня была такая же проблема, потому что я посылал дату, а не секунды. Попробуйте это:time_since(time() - strtotime($datetime))
Igor Jerosimić 2.08.2013 15:12:54
TWAKK с просто сейчас. функция time_since ($ since) {$ chunks = array (массив (60 * 60 * 24 * 365, 'year'), массив (60 * 60 * 24 * 30, 'month'), массив (60 * 60 * 24 * 7, «неделя»), массив (60 * 60 * 24, «день»), массив (60 * 60, «час»), массив (60, «минута»), массив (1, «сек»)); для ($ i = 0, $ j = count ($ chunks); $ i <$ j; $ i ++) {$ seconds = $ chunks [$ i] [0]; $ name = $ chunks [$ i] [1]; $ count = floor ($ с / $ секунд); if ($ count! = 0) {break;}} if ($ count == 1) {return $ print = '1'. $ name;} иначе if ($ count <1) {return $ print = 'прямо сейчас «; } else {return $ print = "$ count {$ name} s";}}
Crisam De gracia 31.01.2018 23:26:33
function timeAgo($timestamp){
    $datetime1=new DateTime("now");
    $datetime2=date_create($timestamp);
    $diff=date_diff($datetime1, $datetime2);
    $timemsg='';
    if($diff->y > 0){
        $timemsg = $diff->y .' year'. ($diff->y > 1?"'s":'');

    }
    else if($diff->m > 0){
     $timemsg = $diff->m . ' month'. ($diff->m > 1?"'s":'');
    }
    else if($diff->d > 0){
     $timemsg = $diff->d .' day'. ($diff->d > 1?"'s":'');
    }
    else if($diff->h > 0){
     $timemsg = $diff->h .' hour'.($diff->h > 1 ? "'s":'');
    }
    else if($diff->i > 0){
     $timemsg = $diff->i .' minute'. ($diff->i > 1?"'s":'');
    }
    else if($diff->s > 0){
     $timemsg = $diff->s .' second'. ($diff->s > 1?"'s":'');
    }

$timemsg = $timemsg.' ago';
return $timemsg;
}
15
27.04.2013 04:11:02
Я использовал измененную версию этого, я заменил строку date_create на $ datetime2 = new DateTime (); $ datetime2-> setTimestamp ($ Отметка времени); и удалил все апострофы перед строкой s
Oliverb 2.08.2016 09:30:10

PHP \DateTime::diffвозвращает \DateIntervalобъект, для которого вы можете получить минуты с помощью открытого iсвойства.

5
15.01.2016 14:49:50