279 votes

Conversion timestamp à temps en PHP par exemple il y a 1 jour il y a, il y a 2 jours...

Je suis en train de convertir un timestamp au format 2009-09-12 20:57:19 et le transformer en quelque chose comme 3 minutes ago avec PHP.

J'ai trouvé utile de script pour faire cela, mais je pense que c'est la recherche d'un format différent pour être utilisé comme variable de temps. Le script je suis désireux de modifier pour fonctionner avec ce format est le suivant:

function _ago($tm,$rcs = 0) {
    $cur_tm = time(); 
    $dif = $cur_tm-$tm;
    $pds = array('second','minute','hour','day','week','month','year','decade');
    $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);

    for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
        $no = floor($no);
        if($no <> 1)
            $pds[$v] .='s';
        $x = sprintf("%d %s ",$no,$pds[$v]);
        if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
            $x .= time_ago($_tm);
        return $x;
    }

Je pense que sur ces quelques premières lignes du script est d'essayer de faire quelque chose qui ressemble à ceci (format de date différent de mathématiques):

$dif = 1252809479 - 2009-09-12 20:57:19;

Comment puis-je convertir mon timestamp dans que (unix?) format?

549voto

Glavić Points 13021
<h3>Exemple d’utilisation :<pre class="lang-php prettyprint-override"><code></code></pre><p>Entrée peut être toute <a href="http://www.php.net/manual/en/datetime.formats.php" rel="nofollow">prise en charge du format de date et d’heure</a>.</p><h3>Sortie :</h3><pre class="lang-none prettyprint-override"><code></code></pre><h3>Fonction :</h3><pre class="lang-php prettyprint-override"><code></code></pre></h3>

105voto

Ayman Hussein Points 1193
function time_elapsed_string($ptime)
{
    $etime = time() - $ptime;

    if ($etime < 1)
    {
        return '0 seconds';
    }

    $a = array( 12 * 30 * 24 * 60 * 60  =>  'year',
                30 * 24 * 60 * 60       =>  'month',
                24 * 60 * 60            =>  'day',
                60 * 60                 =>  'hour',
                60                      =>  'minute',
                1                       =>  'second'
                );

    foreach ($a as $secs => $str)
    {
        $d = $etime / $secs;
        if ($d >= 1)
        {
            $r = round($d);
            return $r . ' ' . $str . ($r > 1 ? 's' : '') . ' ago';
        }
    }
}

29voto

Panama Jack Points 4442

C’est réellement une meilleure solution que j’ai trouvé. Utilise jQuery mais il fonctionne parfaitement. Aussi, il actualise automatiquement la même manière donc et Facebook ne fait donc pas besoin d’actualiser la page pour voir les mises à jour.

Ce plugin va lire votre attr dans le tag et le remplir pour vous.

http://Timeago.YARP.com/

5voto

Bobb Fwed Points 47

J’ai modifié la fonction d’origine un peu pour être (à mon avis plus utile ou logique).

0voto

LukeWarm74 Points 82

Vous aurez à faire chaque pièce de votre timestamp, et de le convertir en temps Unix. Par exemple pour l'horodatage, 2009-09-12 20:57:19.

(((2008-1970)365)+(830)+12)*24+20 serait vous donner une estimation APPROXIMATIVE du nombre d'heures depuis le 1er janvier 1970.

Prendre un nombre, le multiplier par 60 et ajouter 57 pour obtenir le procès-verbal.

Prendre, de le multiplier par 60 et ajouter 19.

Que serait le convertir en très gros et à tort cependant.

Est-il une raison vous ne pouvez pas prendre que la normale Unix de temps pour commencer?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X