Преобразование метки времени Unix в стиль Twitter / Facebook - PullRequest
10 голосов
/ 13 июля 2011

Я пытаюсь преобразовать метку времени Unix для отображения, как Facebook и Twitter.Например, когда вы видите твиты или комментарии, размещенные в твиттере / facebook, вы видите дату / время, отображаемые следующим образом:

'2 минуты назад' или '2 дня назад' или '2 недели назад'

Кто-нибудь знает какую-либо функцию, чтобы она работала таким образом?Я предполагаю, что это будет обычай.

Любая помощь очень ценится

Ответы [ 3 ]

22 голосов
/ 13 июля 2011

Если вы используете php, вы можете попробовать следующую функцию, опубликованную Мэттом Джонсом

http://www.mdj.us/web-development/php-programming/another-variation-on-the-time-ago-php-function-use-mysqls-datetime-field-type/

// DISPLAYS COMMENT POST TIME AS "1 year, 1 week ago" or "5 minutes, 7 seconds ago", etc...
function time_ago($date,$granularity=2) {
    $date = strtotime($date);
    $difference = time() - $date;
    $periods = array('decade' => 315360000,
        'year' => 31536000,
        'month' => 2628000,
        'week' => 604800, 
        'day' => 86400,
        'hour' => 3600,
        'minute' => 60,
        'second' => 1);

    foreach ($periods as $key => $value) {
        if ($difference >= $value) {
            $time = floor($difference/$value);
            $difference %= $value;
            $retval .= ($retval ? ' ' : '').$time.' ';
            $retval .= (($time > 1) ? $key.'s' : $key);
            $granularity--;
        }
        if ($granularity == '0') { break; }
    }
    return ' posted '.$retval.' ago';      
}
3 голосов
/ 13 июля 2011

Мне также нравится плагин jquery timeago , который автоматически обновляет все поля времени в установленном таймере, поэтому он актуален, если пользователь некоторое время остается на странице.При рендеринге вам нужно будет конвертировать время unix в формат ISO 8601, но я считаю, что для этого есть функция php.

0 голосов
/ 18 января 2018

Простой скрипт, который занимает время в секундах и прекрасно работает

function twitter_time($time) {
  $delta = time() - strtotime($time);
  if ($delta < 60) {
    return '30sec ago';
  } else if ($delta < 120) {
    return '1m ago';
  } else if ($delta < (60 * 60)) {
    return floor($delta / 60) . 'm ago';
  } else if ($delta < (120 * 60)) {
    return '1h ago';
  } else if ($delta < (24 * 60 * 60)) {
    return floor($delta / 3600) . 'h ago';
  } else if ($delta < (48 * 60 * 60)) {
    return '1d ago';
  } else if ($delta < (86400*7)) {
    return floor($delta / 86400) . 'd ago';
  } else if ($delta < (2*86400*7)) {
    return '1week ago';
  } else if ($delta < (2592000)) {
    return floor($delta / (86400*7)) . 'weeks ago';
  } else if ($delta < (2*2592000)) {
    return '1mon ago';
  } else if ($delta < (31104000)) {
    return floor($delta / 2592000) . 'mon ago';
  } else if ($delta < (2*31104000)) {
    return '1year ago';
  } else {
    return number_format(floor($delta / 31104000)) . 'years ago';
  } 
}
...