[Snippet] Función hace X tiempo (Estilo Facebook)

1778 visitas 1 respuestas

Buenas, hoy ponemos una función que nos mostrará, pasando un timestamp unix (lo que nos devuelve la función time() ) cuantos segundos, minutos, dias, meses,.. al estilo Facebook.

Seguramente habrán otras formas de implementarla, mejorarla etc, así que si las tenéis compartidlas aquí y la mejoramos entre todos!

<?php
function time_passed($timestamp)
{
    $diff = time() - (int)$timestamp;

    if($diff < 20)                                     { $return = 'Ahora mismo';                                            }
    else if($diff >= 20 AND $diff < 60)             { $return = sprintf('hace %s segundos.'    , $diff);                    }
    else if($diff >= 60 AND $diff < 120)            { $return = sprintf('hace %s minuto.'    , floor($diff/60));            }
    else if($diff >= 120 AND $diff < 3600)            { $return = sprintf('hace %s minutos.'    , floor($diff/60));            }
    else if($diff >= 3600 AND $diff < 7200)            { $return = sprintf('hace %s hora.'        , floor($diff/3600));        }
    else if($diff >= 7200 AND $diff < 86400)        { $return = sprintf('hace %s horas.'    , floor($diff/3600));        }
    else if($diff >= 86400 AND $diff < 172800)        { $return = sprintf('hace %s dia.'        , floor($diff/86400));        }
    else if($diff >= 172800 AND $diff < 604800)        { $return = sprintf('hace %s dias.'        , floor($diff/86400));        }
    else if($diff >= 604800 AND $diff < 1209600)    { $return = sprintf('hace %s semana.'    , floor($diff/604800));        }
    else if($diff >= 1209600 AND $diff < 2629744)    { $return = sprintf('hace %s semanas.'    , floor($diff/604800));        }
    else if($diff >= 2629744 AND $diff < 5259488)    { $return = sprintf('hace %s mes.'        , floor($diff/2629744));    }
    else if($diff >= 5259488 AND $diff < 31556926)    { $return = sprintf('hace %s meses.'    , floor($diff/2629744));    }
    else if($diff >= 31556926 AND $diff < 63113852)    { $return = sprintf('hace %s año.'        , floor($diff/31556926));    }
    else if($diff >= 63113852)                        { $return = sprintf('hace %s años.'        , floor($diff/31556926));    }
    else                                             { $return = date('H:i:s d/m/Y', $timestamp);                        }

    return $return;
}
?>

Tomar en consideración que lo que vemos como "Ahora mismo" es desde el tiempo actual a 20 segundos atras.

Cómo funciona es muy simple, solo tendremos que pasar el valor de tiempo y mostrarlo con un echo . Por ejemplo:

echo time_passed(time()); // Nos mostrará siempre "Ahora mismo"

echo time_passed(time()-3601); // Nos mostrará siempre "Hace 1 hora."

Y asi sucesivamente hasta hace X años, pasando por, segundos, minutos, horas, dias, semanas, meses, años.

Bueno espero sea de utilidad para alguien!!

Un saludo!!!

por desde España

Registrado desde: 07 Jan 03

Respuestas

0 0

Una posible alternativa es trasladar esta funcionalidad al navegador del usuario, de manera que sea este el que traduzca las distintas fechas por el texto "hace X tiempo".

Plugin de Jquery TimeAgo http://timeago.yarp.com/

por desde España

Registrado desde: 02 Jul 02