2011-07-13 11 views
10

Estoy tratando de convertir una marca de tiempo de Unix para mostrar como Facebook y Twitter. Por ejemplo, cuando usted ve los tweets o comentarios colocados en twitter/facebook se ve la fecha/hora aparece así:Convertir una marca de tiempo de Unix al estilo de twitter/facebook

'hace 2 minutos' o 'hace 2 días' o "hace 2 semanas

Does Alguien sabe de alguna función para que funcione de esta manera. Supongo que será uno personalizado.

Cualquier ayuda se agradece mucho

+0

Qué idioma se utiliza? – calumbrodie

+0

posible duplicado de [Convertir la marca de tiempo a tiempo en PHP por ejemplo 1 día atrás, hace 2 días ...] (http://stackoverflow.com/questions/1416697/converting-timestamp-to-time-ago-in-php -eg-1-day-ago-2-days-ago) –

Respuesta

22

Si está usando PHP es posible que desee probar la siguiente función que fue publicado por Matt Jones

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';  
} 
+0

¡Saludos geniales! funciona un encanto. – HomeBrew

+4

No me agradezcas, gracias a Matt Jones. HTH – calumbrodie

+0

eso es todo! Completamente lo que quiero. –

3

también me gusta la jquery timeago plugin cuales automáticamente actualizará todos los campos de tiempo en un temporizador establecido para que esté actualizado si el usuario permanece en una página por un tiempo. Necesitarás convertir el tiempo de Unix al formato ISO 8601 cuando renderices pero creo que hay una función php para eso.

0

simple script que toma tiempo en segundos y funciona muy bien

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'; 
    } 
} 
Cuestiones relacionadas