IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gérer l'affichage d'une date vers un format plus "confortable" visuellement


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut Gérer l'affichage d'une date vers un format plus "confortable" visuellement
    Bonjour,

    Je reviens encore avec un problème de gestion de date

    Je suis en train d'écrire une petite portion de code pour gérer l'affichage d'une date vers un format plus "confortable" visuellement.
    Quelques exemples d'affichages :
    • Aujourd'hui à 15h25 (il me manque l'heure dans mon code)
    • Hier à 03h07 (il me manque l'heure dans mon code)
    • Il y a 2 jours (forcement avec un 's' à la fin)
    • Il y a 1 an (s si plusieurs années)
    • Il y a 3 minutes (inutile de préciser les secondes)
    • Il y a 34 secondes
    • Il y a 2 heures (inutile de préciser les minutes)
    • Il y a 2 mois (inutile de préciser les jours)


    J'ai commencé à écrire une portion de code mais j'ai un problème avec "aujourd'hui" et "hier" Je n'ai jamais le bon if qui s'affiche..
    exemple pour le 2016-02-23 23:30:49 j'ai le if Aujourd'hui qui s'affiche alors que normalement c'est hier le 23/02..

    autre question, comment rajouter l'heure à "aujourd'hui" et "hier" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
     
    $diff = (new \DateTime())->diff(new \DateTime('2016-02-23 23:30:49'));
     
    if ($diff->d == 0){
    	$date_formatee = "aujourd'hui";
    }else{
     
    	if ($diff->d == 1){
    		$date_formatee = "hier";
    	}else{
     
    		if ($diff->y){
    			$date_formatee = $diff->y.' an'.(($diff->y > 1) ? 's' : '');
    		}else{
     
    			if ($diff->m){
    				$date_formatee = $diff->m.' mois';
    			}else{
     
    				if ($diff->d){
    					$date_formatee = $diff->d.' jours';
    				}else{
     
    					if ($diff->h){
    						$date_formatee = $diff->h.' heure'.(($diff->h > 1) ? 's' : '');
    					}else{
     
    						if ($diff->i){
    							$date_formatee = $diff->i.' minute'.(($diff->i > 1) ? 's' : '');
    						}else{
     
    							if ($diff->s){
    								$date_formatee = $diff->s.' seconde'.(($diff->s > 1) ? 's' : '');
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }
     
    echo $date_formatee;
     
    ?>
    Je vous remercie pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    bon va falloir que tu en parles à ton professeur (ABCIWEB) de tes problèmes
    Tiens une soluce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $past = new \DateTime('2016-02-23 23:30:49');
    $diff = (new \DateTime())->diff($past);
     
    if ($diff->d === 0)
        // ici le "aujourd'hui" prend le pas sur les formats "il y a 3 heures" ou "il y a 34 secondes"
        echo "aujourd'hui à ", $past->format('H'), 'h', $past->format('i');
    elseif ($diff->d === 1)
        echo 'hier à ', $past->format('H'), 'h', $past->format('i');
    else
    {
        $txt = '';
     
        if ($diff->y)
            $txt = $diff->y.' an'.(($diff->y > 1) ? 's' : '');
        elseif ($diff->m)
            $txt = $diff->m.' mois';
        elseif ($diff->d)
            $txt = $diff->d.' jour'.(($diff->d > 1) ? 's' : '');
     
        echo 'Il y a ', $txt;
    }
    Tu peux compléter en rajoutant les formats "Aujourd'hui, il y a 3 heures" ou "Aujourd'hui, il y a 34 secondes"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    C'est plus subtil que ça. $diff->d vaut 0 si l'écart fait moins de 86400 secondes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
     
    $past = new \DateTime('2016-02-23 23:30:49');
    $diff = (new \DateTime('2016-02-22 23:30:48'))->diff($past);
     
    if ($diff->d === 0)
    // ici le "aujourd'hui" prend le pas sur les formats "il y a 3 heures" ou "il y a 34 secondes"
    echo "<br>aujourd'hui à ", $past->format('H'), 'h', $past->format('i');
    elseif ($diff->d === 1)
    echo '<br>hier à ', $past->format('H'), 'h', $past->format('i');
     
    echo "<br>2 secondes de plus et ca buggue. Le 22 n'est pas le meme jour que le 23 donc on devrait avoir hier";
    $past = new \DateTime('2016-02-23 23:30:49');
    // j'ajoute 2 secondes
    $diff = (new \DateTime('2016-02-22 23:30:50'))->diff($past);
     
    if ($diff->d === 0)
    // ici le "aujourd'hui" prend le pas sur les formats "il y a 3 heures" ou "il y a 34 secondes"
    echo "<br>aujourd'hui à ", $past->format('H'), 'h', $past->format('i');
    elseif ($diff->d === 1)
    echo '<br>hier à ', $past->format('H'), 'h', $past->format('i');

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    @scvo.0ne
    Bien vu, effectivement, il y a nécessité de corriger un chouïa la fonction pour tenir compte de ce problème.

    Je vois un ajustement de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($diff->d === 0)
        echo ($now->format('%d') === $past->format('%d')) ? "aujourd'hui à " : 'hier à ', $past->format('H'), 'h', $past->format('i');

  5. #5
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Salut

    toujours des problèmes d'affichages

    Résultat à l'écran pour une date du 2016-02-23 23:30:49 avec le code de scvo.0ne
    hier à 23h30
    2 secondes de plus et ca buggue. Le 22 n'est pas le meme jour que le 23 donc on devrait avoir hier
    aujourd'hui à 23h30
    C'est ni hier et ni aujourd'hui car il est 00h35 (jeudi) au moment ou j'écris. donc normalement c'est "il y a 2 jours"




    Résultat à l'écran pour la même date donc 2016-02-23 23:30:49 avec le code de rawsrc
    Il y a 1 jour
    donc faux car la vraie réponse c'est "il y a 2 jours" du 23 au 25 il y a deux jours.

    ET si je modifie cette fois la date, je met le 24 (donc hier au moment ou j'écris) il m'affiche 2 erreurs :

    Notice: Undefined variable: now in C:\wamp\www\pag\test2.php on line 9
    Fatal error: Call to a member function format() on a non-object in C:\wamp\www\pag\test2.php on line 9
    LA LIGNE 9 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ($now->format('%d') === $past->format('%d')) ? "aujourd'hui à " : 'hier à ', $past->format('H'), 'h', $past->format('i');

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    bon va falloir que tu en parles à ton professeur (ABCIWEB) de tes problèmes
    Je vois qu'on se moque... c'est pas joli joli ça. D'autant que les "verbeux" ne sont peut-être pas toujours inutiles pour commenter tes ruses de sioux

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Elle est un peu bancale ta cuisine.
    Fais au plus simple, si le nombre d'heures est inférieur à 24 h, compte en heures "Il y a x heures" et ceci quelque soit la date calendaire même si entre temps t'as changé de jour.
    Savoir que c'était hier ou il y a 3 heures, ça ne devrait pas changer trop la face du monde.

    Et si après tu veux persister sans t'embarquer dans une usine à gaz de conditions, tu peux très bien aussi afficher l'horodatage passé et à coté le "Il y x ce_que_tu_veux"

  8. #8
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Elle est un peu bancale ta cuisine.
    Fais au plus simple, si le nombre d'heures est inférieur à 24 h, compte en heures "Il y a x heures" et ceci quelque soit la date calendaire même si entre temps t'as changé de jour
    Oui car avec "aujourd'hui à 12h15" et "Il y a x heures" c'est deux conditions identiques.. Donc je vais retirer la condition aujourd'hui je pense et garder les heures (plus simple). Bon je bricole et je reviens vous voir les amis

  9. #9
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    bon j'y arrive définitivement pas ! il y a toujours un problème, je suis dessus depuis des heures

    J'ai bricolé le code de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $past = new \DateTime('2016-02-23 23:19:49');
    $diff = (new \DateTime())->diff($past);
     
    if ($diff->d === 1)
        echo 'hier à ', $past->format('H'), 'h', $past->format('i');
    else
    {
        $txt = '';
     
        if ($diff->y)
            $txt = $diff->y.' an'.(($diff->y > 1) ? 's' : '');
        elseif ($diff->m)
            $txt = $diff->m.' mois';
        elseif ($diff->d)
            $txt = $diff->d.' jours'; // toujours plus grand que 2 jours sinon j'affiche hier donc condition du S inutile.
        elseif ($diff->h)
            $txt = $diff->h.' heure'.(($diff->h > 1) ? 's' : '');
        elseif ($diff->i)
            $txt = $diff->i.' minute'.(($diff->i > 1) ? 's' : '');
        elseif ($diff->s)
            $txt = $diff->s.' seconde'.(($diff->s > 1) ? 's' : '');
     
        echo 'Il y a ', $txt;
    }
    Le problème maintenant c'est que pour 2016-02-23 23:19:49 il m'affiche hier à 23h19

    Je veux bien retirer la condition "aujourd'hui" sur la suggestion de rawsrc mais "hier" je ne peux pas l'enlever car "Il y a 1 jour" c'est pas top

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut


    et avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $now  = (new \DateTime())->setTime(23, 59, 59);
    $past = new \DateTime('2016-02-23 23:19:49');
    $diff = $now->diff($past);
    $txt  = 'Il y a ';
     
    if ($diff->y)
        $txt .= $diff->y.' an'.(($diff->y > 1) ? 's' : '');
    elseif ($diff->m)
        $txt .= $diff->m.' mois';
    elseif ($diff->d)
    {
        if ($diff->d >= 2)
            $txt .= $diff->d.' jours';
        else
            $txt = 'hier à '.$past->format('H').'h'.$past->format('i');
    }
    elseif ($diff->h)
        $txt .= $diff->h.' heure'.(($diff->h > 1) ? 's' : '');
    elseif ($diff->i)
        $txt .= $diff->i.' minute'.(($diff->i > 1) ? 's' : '');
    elseif ($diff->s)
        $txt .= $diff->s.' seconde'.(($diff->s > 1) ? 's' : '');
     
    echo $txt;
    Après il faudrait que tu listes les cas spéciaux en indiquant le résultat voulu, parce que là on joue quand même un peu aux devinettes.

  11. #11
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    aie... presque,

    pour 2016-02-25 17:45:49 il m'affiche Il y a 6 heures alors que normalement Il y a 3 minutes décidément

    Citation Envoyé par rawsrc Voir le message
    Après il faudrait que tu listes les cas spéciaux en indiquant le résultat voulu
    c'est à dire ?
    Si la date est la même qu'aujourd'hui alors : Il y a 17 secondes OU Il y a 8 minutes OU Il y a 14 heures.
    Si la date est la même qu'hier alors : hier à 13h47
    Si la date est passée depuis 2 jours ou plus alors : Il y a X jours
    Si la date est passée depuis 1 mois ou plus alors : Il y a X mois
    Si la date est passée depuis 1 année ou plus alors : Il y a X an(s)

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ok, j'ai fait une cagade

    bon pour les cas spéciaux tu en as oublié une tonne :
    On est le 1er janvier N est ce que le message du 31 décembre N-1 : tu veux voir Il y a un an ? Ou il faut attendre le 1er janvier N+1 pour voir Il y a un an ?
    Pareil pour les débuts de mois : le 1er mars N tu veux voir Il y 1 mois pour les messages datés du 29 février N ?
    Et il y en a encore d'autres ...

  13. #13
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    bien-sur que non, il faut bien entendu attendre N+1.. sinon aucun sens d'écrire Il y a 1 an si le message à été posté il y a 2 jours

  14. #14
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ce que je voulais faire c'est attirer ton attention sur les effets de bord.

    Regarde la cuisine pour les jours : même quand la différence arithmétique est inférieure à 2 jours (2016-02-25 01:00:00) et (2016-02-23 23:00:00) -> différence 1 jour et 2 heures -> toi tu veux voir Il y a 2 jours.
    Maintenant, il va falloir t'attarder sur les fins et débuts de mois pour gérer ces cas de figures.

  15. #15
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    oui tu as raison c'est pas top du coup, je suis perdu je ne sais plus..... mais comment les autres sites fonctionnent ? il y a tellement de sites qui propose ce format d'affichage..
    encore bon.. pour les jours 23h59 heures de décalage (au max) c'est pas dramatique mais pour les mois (30 jours de décalage) et années (12 mois de décalage) aieeeeee tu me suggère une solution ?

  16. #16
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Allez parce que c'est toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    function period($x, $y)
    {
        $now  = new \DateTime($x);
        $past = new \DateTime($y);
        $diff = $now->diff($past);
        $txt  = 'Il y a ';
     
        if ($diff->y)
            $txt .= $diff->y.' an'.(($diff->y > 1) ? 's' : '');
        elseif ($diff->m)
            $txt .= $diff->m.' mois';
        elseif ($diff->d)
        {
            if ($diff->h)
                $txt .= ($diff->d + 1).' jours';
            else
                $txt = 'Hier à '.$past->format('H').'h'.$past->format('i');
        }
        else
        {
            if ($now->format('d') !== $past->format('d'))
                $txt = 'Hier à '.$past->format('H').'h'.$past->format('i');
            elseif ($diff->h)
                $txt .= $diff->h.' heure'.(($diff->h > 1) ? 's' : '');
            elseif ($diff->i)
                $txt .= $diff->i.' minute'.(($diff->i > 1) ? 's' : '');
            elseif ($diff->s)
                $txt .= $diff->s.' seconde'.(($diff->s > 1) ? 's' : '');
        }
     
        return $txt;
    }
     
    function test($d1, $d2, $assert)
    {
        $x = period($d1, $d2);
        echo $x, ' | ', $assert, '  ---  ', 'Passed : ', ($x === $assert) ? 'OK' : 'FAIL', '<br>';
    }
     
    test('2016-02-25 19:11:00', '2016-02-25 19:10:35', 'Il y a 25 secondes');
    test('2016-02-25 19:11:00', '2016-02-25 19:00:35', 'Il y a 10 minutes');
    test('2016-02-25 19:11:00', '2016-02-24 19:00:35', 'Hier à 19h00');
    tu trouveras en fin de script le moyen de tester tous les cas exotiques, histoire de voir de la manière la plus exhaustive possible le comportement de la fonction, à toi de compléter en imaginant lesdits tests.

  17. #17
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    bon c'est définitif, tu aimes jouer avec mes nerfs

    Parfait ! j'ai testé plusieurs cas de figures et apparemment aucun problème !

    J'ai également testé sur mon script (en local) et pas de problème!

    Une question peut-être stupide mais je me lance quand même :

    le $x dans la première ligne function period($x, $y) c’était bien pour les tests ? mais il faut bien le supprimer n'est-ce pas ? même chose pour la 3eme ligne : DateTime($x);

    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    function period($y)
    {
        $now  = new \DateTime();
        $past = new \DateTime($y);
        $diff = $now->diff($past);
        $txt  = 'Il y a ';
     
        if ($diff->y)
            $txt .= $diff->y.' an'.(($diff->y > 1) ? 's' : '');
        elseif ($diff->m)
            $txt .= $diff->m.' mois';
        elseif ($diff->d)
        {
            if ($diff->h)
                $txt .= ($diff->d + 1).' jours';
            else
                $txt = 'Hier à '.$past->format('H').'h'.$past->format('i');
        }
        else
        {
            if ($now->format('d') !== $past->format('d'))
                $txt = 'Hier à '.$past->format('H').'h'.$past->format('i');
            elseif ($diff->h)
                $txt .= $diff->h.' heure'.(($diff->h > 1) ? 's' : '');
            elseif ($diff->i)
                $txt .= $diff->i.' minute'.(($diff->i > 1) ? 's' : '');
            elseif ($diff->s)
                $txt .= $diff->s.' seconde'.(($diff->s > 1) ? 's' : '');
        }
     
        return $txt;
    }

  18. #18
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Toutafé ;-)

    Il est important de bien saisir le déroulé de cette problématique. Je suis persuadé que tu aurais pu parvenir à élaborer une solution acceptable par toi-même.
    Solution fonctionnelle mais probablement pas optimisée. L'optimisation vient dans un second temps.
    Le truc c'est que lorsque que tu bloques, il faut penser à prendre un crayon et un papier pour schématiser le problème. Souvent le fait de le visualiser t'aide à réfléchir.
    Avec l'habitude et l'expérience, tu arriveras à repousser cette nécessité et elle ne te sera utile que pour des problèmes complexes mais je connais pas mal de dév qui adorent se poser avec crayon, papier et gribouiller.

  19. #19
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    oui c'est une solution intéressante pour schématiser la portion de code qui pose problème.

    Je suis encore au stade de l'apprentissage des bases seulement mais bon j'avance doucement mais surement, je suis inscrit sur de bons sites de cours php/mysql.

    L'important c'est que lorsqu'on m'aide, je ne me contente pas juste de faire du copie/colle, j'essaie de comprendre le code, le modifier, l'adapter etc..

    Je programme en procédural pour le moment car la poo est encore flou. J'apprends aussi la structure MVC pour la séparation du code et du design.

  20. #20
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Ooops ! Mauvaise surprise, je viens de m'apercevoir que c'est toujours pas bon incroyable cette portion de code !!

    Voici la liste des membres inscrits sur mon site (tests en local) avec la date d'inscription :

    Christophe
    2016-02-23 15:53:25

    Cedric
    2016-02-23 15:56:54
    >>> mon test à 16h32.
    Laurent
    2016-02-23 16:38:33

    Frederic
    2016-02-23 16:38:49

    Sophie
    2016-02-23 16:43:56

    maintenant voici la copie d'écran de l'affichage des dates à coté de chaque membre :

    Note : J'ai testé à 16h32 ! mum.. pour Laurent, Frederic et Sophie l'affichage est correct, il y a 3 jours..

    Nom : profils.png
Affichages : 237
Taille : 28,4 Ko


    ET à 17h11 il m'affiche :

    Nom : profils2.png
Affichages : 248
Taille : 28,5 Ko

    le script est fou ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Affichage d'une date au bon format
    Par tomy29 dans le forum Struts 1
    Réponses: 9
    Dernier message: 30/10/2008, 18h50
  2. affichage d'une date depuis mysql
    Par kitty2006 dans le forum Requêtes
    Réponses: 7
    Dernier message: 22/08/2006, 18h56
  3. Affichage d'une date dans x jours
    Par Paulux1 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/07/2006, 17h49
  4. [VB6] mauvaise affichage d'une date
    Par robert_trudel dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 11/06/2006, 19h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo