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 :

Comment simplement comparer des date en fonction de l'année


Sujet :

Langage PHP

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 097
    Points : 944
    Points
    944
    Par défaut Comment simplement comparer des date en fonction de l'année
    Bonjour,

    J'aimerais savoir ce que vous me recommanderiez pour aficher des photos par année.
    Les info que j'extrait de la base de donnée sont ainsi
    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
    47
    48
    49
    50
    51
     
    array(
    	(int) 0 => array(
    		'Media' => array(
    			'id' => '69',
    			'ref' => 'Course',
    			'ref_id' => '1',
    			'file' => '/files/Images/Courses/1/montydiliez.png',
    			'position' => '1',
    			'created' => '2015-05-26 00:00:44',
    			'type' => 'pic',
    			'icon' => '/files/Images/Courses/1/montydiliez.png'
    		)
    	),
    	(int) 1 => array(
    		'Media' => array(
    			'id' => '71',
    			'ref' => 'Course',
    			'ref_id' => '1',
    			'file' => '/files/Images/Courses/1/defago.png',
    			'position' => '2',
    			'created' => '2015-05-26 00:00:58',
    			'type' => 'pic',
    			'icon' => '/files/Images/Courses/1/defago.png'
    		)
    	),
    	(int) 2 => array(
    		'Media' => array(
    			'id' => '70',
    			'ref' => 'Course',
    			'ref_id' => '1',
    			'file' => '/files/Images/Courses/1/amey.png',
    			'position' => '3',
    			'created' => '2015-05-26 00:00:49',
    			'type' => 'pic',
    			'icon' => '/files/Images/Courses/1/amey.png'
    		)
    	),
    	(int) 3 => array(
    		'Media' => array(
    			'id' => '68',
    			'ref' => 'Course',
    			'ref_id' => '1',
    			'file' => '/files/Images/Courses/1/podium.png',
    			'position' => '4',
    			'created' => '2015-05-26 00:00:21',
    			'type' => 'pic',
    			'icon' => '/files/Images/Courses/1/podium.png'
    		)
    	)
    )
    Dans cette exmple, mes photos sont toutes de 2015 et la date se trouve sous 'created'
    J'aimerais éviter, l'année prochaine de modifier mon code.

    J'aimerais donc que les photos s'affichent ainsi au fure des années

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <h3>Photo 2015</h3>
    [photos]
    <h3>Photo 2016</h3>
    [photos]
    <h3>Photo 2017</h3>
    [photos]
    Pour commencer, j'ai fait une boucle pour afficher les photos. Ca macrhe.

    Mais comment comparer l'année?

    La première question que je me pose, es-ce que in_array() va suffir pour rechercher les 4 premieres caractere de 'created'?
    Le truc de pas bien c'est que in_array() m'oblige à spécifier les années pour comparer alors que je préfèrerait qu'il parcours le tableau pour voir tous les 4 premiers caratere de 'created' et les mettre dans un array "tampon"

    Puis je parcours cette array "tampon" en commencant par l'année la plus ancienne et j'affiche les photos correspondant aux années correspondantes

    Comment me recommanderiez-vous de faire, au plus smple?

    Milles mercis

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La valeur de l'année tu peux l'avoir directement dans la requête SELECT YEAR(created) as annee_creationEnsuite tu classes tes résultats Et une petit truc tout simple pour avoir la séparation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $annee = 0;
    while ($row = $sth->fetch(PDO::FETCH_ASSOC()) {
        if ($annee != $row['annee_creation']) {
               echo '<h2>' . $row['annee_creation'] . '</h2>';
               $annee = $row['annee_creation'];
        }
        // affichage des autres infos
    }

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 097
    Points : 944
    Points
    944
    Par défaut
    Salut,
    Merci pour tes conseils. Le truc c'est que je travaille avec CakePHP et dans mon cas, je suis dans une vue.
    Ca veut dire, que je récupère l'array $medias qui affiche ceci
    Code PHP : 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
    47
    48
    49
    50
    51
     
    array(
    	(int) 0 => array(
    		'Media' => array(
    			'id' => '69',
    			'ref' => 'Course',
    			'ref_id' => '1',
    			'file' => '/files/Images/Courses/1/montydiliez.png',
    			'position' => '1',
    			'created' => '2015-05-26 00:00:44',
    			'type' => 'pic',
    			'icon' => '/files/Images/Courses/1/montydiliez.png'
    		)
    	),
    	(int) 1 => array(
    		'Media' => array(
    			'id' => '71',
    			'ref' => 'Course',
    			'ref_id' => '1',
    			'file' => '/files/Images/Courses/1/defago.png',
    			'position' => '2',
    			'created' => '2015-05-26 00:00:58',
    			'type' => 'pic',
    			'icon' => '/files/Images/Courses/1/defago.png'
    		)
    	),
    	(int) 2 => array(
    		'Media' => array(
    			'id' => '70',
    			'ref' => 'Course',
    			'ref_id' => '1',
    			'file' => '/files/Images/Courses/1/amey.png',
    			'position' => '3',
    			'created' => '2015-05-26 00:00:49',
    			'type' => 'pic',
    			'icon' => '/files/Images/Courses/1/amey.png'
    		)
    	),
    	(int) 3 => array(
    		'Media' => array(
    			'id' => '68',
    			'ref' => 'Course',
    			'ref_id' => '1',
    			'file' => '/files/Images/Courses/1/podium.png',
    			'position' => '4',
    			'created' => '2015-05-26 00:00:21',
    			'type' => 'pic',
    			'icon' => '/files/Images/Courses/1/podium.png'
    		)
    	)
    )

    Je dois donc exploiter cette array (sauf erreur de ma part)

    J'ai donc finalement réussi à le faire avec les fonctions suivante
    substr()
    asort()
    puis une array qui torune dans une autre, comme ceci:
    Code PHP : 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
    if(count($medias) > 0){
     
        $years = array();
     
          foreach ($medias as $k => $v){
     
            $years[$k] = substr($v['Media']['created'], 0, 4);
        }
        asort($years);
        $years = array_unique($years);
     
        foreach($years as $k => $v){
            echo '<h3>';
            echo __("Photos de l'édition");
            echo '&nbsp;';
            echo $v;
            echo '</h3>';
     
            foreach($medias as $kk => $vv){
                if($v == substr($vv['Media']['created'],0,4)){
                    echo $vv['Media']['file'];
                    #echo $this->Image->resize($vv['Media']['file'], 150, 100, array('class'=>'img-responsive','alt'=>$course['Course']['name'],'title'=>$course['Course']['name']));
                }
            }
        }
    }
    Es-ce que ca semble porpre? Es-ce que je peux ferme mieux?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je t'ai indiqué des choses et tu n'as rien retenu, donc que veux-tu que je te dise ?

Discussions similaires

  1. Comment comparer des dates
    Par wild133 dans le forum Débuter
    Réponses: 1
    Dernier message: 14/01/2015, 07h53
  2. comparer des dates en fonction
    Par majestic34 dans le forum Excel
    Réponses: 6
    Dernier message: 03/12/2009, 19h12
  3. Fonction pour comparer des dates en matlab
    Par mihaispr dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/07/2009, 16h40
  4. Comment comparer des dates avec la procédure assertEquals de JUNIT ?
    Par andrianiaina dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 25/01/2007, 18h31
  5. [Date] Comparer des dates au format mySQL "date
    Par Marc_P dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 25/10/2004, 15h15

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