Salut à tous je cherche à obtenir un résultat tel que :
Membre inscrit depuis 32 semaines par exemple ;
La seule méthode trouvé c'est celle-ci :
<?php
$date_registred = "";
$date_registred = $user['confirmed_at'];
$date_registred - date('Y-m-d H:i:s');
$now = $date_registred;
?>
Dans ma base de données j'ai inséré le "confirmed_at" avec une fonction MySQL : "NOW()"

7 réponses


SLK
Réponse acceptée

Salut,

moi j'avais voulu faire la même chose pour les messages : "posté il y a ..."

Je m'étais fais une petite fonction pour ça :

public function dateDiff(DateTime $date)
{
    $now = new DateTime('now');

    $dif = $now->diff($date);

    if ($dif->y > 0)
    {
        if ($dif->y > 1)    { return $dif->y . ' ans'; }
        else                { return '1 an'; }
    }
    else if ($dif->m > 0)   { return $dif->m . ' mois'; }
    else if ($dif->d > 0)
    {
        if ($dif->d > 1)    { return $dif->d . ' jours'; }
        else                { return '1 jour'; }
    }
    else if ($dif->h > 0)
    {
        if ($dif->h > 1)    { return $dif->h . ' heures'; }
        else                { return '1 heure'; }
    }
    else
    {
        if ($dif->i > 1)    { return $dif->i . ' minutes'; }
        else                { return '1 minute'; }
    }
}

echo 'Membre inscrit depuis ' . dateDiff($user['confirmed_at']) . '<br>'; 

$date correspond à ta "date d'inscription".
Il faut que $user['confirmed_at'] soit en DateTime

Je ne savais pas comment gérer les singulier/pluriel, alors j'ai fais comme ça, mais il y a probablement plus rapide.

Et si toi tu ne veux que le nombre de jours, tu peux adapter la fonction (du coup elle sera plus simple).

Salut,

À ta place, j'utiliserai une lib spécifique pour gérer les dates, genre Carbon.

Bonjour,

Le truc c'est que déjà tu nous présente un code sans (pour moi) pas plus d'explication que ça.. et qui n'est pas non plus bien présenté (utilise le bouton </> pour bien présenter ton code).
Et tu n'explique pas pourquoi tu nous montres ton code.
Tu as besoin d'un avis ? Ton code ne fonctionne pas ?

Déjà, un truc que je vois c'est que tu déclare une variable vide alors que tu n'as pas vraiment besoin de le faire.
Ensuite tu tente de faire une opération avec la fonction date.
Sauf erreur tu ne peux pas faire une opération en utilisant directement une fonction.
Donc selon moi tu devrais plutôt faire un truc comme ça :

$date_today = date('Y-m-d H:i:s'); 
$date_registred - $date_today;

Et pour finir, pourquoi faire ça ? :

$now = $date_registred; 

Vu que par rapport au code que tu nous montres il n'y a pas de réel utilité.

Salut!
+1 Mika445

Je ne sais pas comment tu stoques tes dates.. ce sont des timestamps ?
Si ce ne sont pas des timestamps tu feras facilement la conversion avec les fonctions php qui vont bien.

Je trouverais lourd de telecharger une lib juste pour ce petit calcul. En revanche si tu penses rencontrer d'autre soucis de ce genre, une lib s'impose ;)

Pour ta solution :

$now = time();
$ref = $date_du_monsieur_en_timestamp; // ex : 1049583759

$diff = $ref - $now; // nombre de seconde séparant les deux instants

// et puis des maths :D
$jours = floor($diff / (24 * 60 * 60)); // parce que 24h * 60min * 60s ça fait un jour :)
$semaines = floor($jours / 7);
// floor (ou ceil) parce que sinon tu risque d'avoir de beaux jours à virgules ^^

.. ou un truc du genre quoi ^^

aurl978
Auteur

tkt j'ai trouvé ça comme fonction :
[]($dateFrom = new DateTime($user['confirmed_at']);
$dateNow = new DateTime(date('Y-m-d H:i:s'));

                   $interval = $dateNow->diff($dateFrom);
                   $dy =  $interval->format('%a jours');)
                  Et tu fait une echo de $dy

SLK, à partir de maintenant j'essayerais de faire comme toi pour l'écriture des if et else. Je trouve que les écrire comme ça c'est beaucoup mieux pour la lecture :D

Oh ça dépend hein.
Je les écris comme ça seulement quand on répète bêtement des trucs, et qui s'aligent verticalement...
Ça ne rend pas toujours bien.

Mais ici, je trouve que ça convient bien, ça aide à une lecture rapide.