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 :

Affichage de tous les mois depuis X date jusqu'à aujourd'hui


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut Affichage de tous les mois depuis X date jusqu'à aujourd'hui
    Bonjour, c'est encore moi,

    Vous avez peut-être lu mon sujet de ce matin (enfin, c'est relatif, le matin québécois ) à propos des sessions. Maintenant ce "problème" passé, je me bute à un nouveau.

    Je souhaite faire un système d'archive autonome. Il liste tous les mois écoulés depuis telle date, jusqu'à aujourd'hui.

    Par exemple, je choisis le 1er avril 2008 :
    Mai 2008 - Archives
    Avril 2008 - Archives

    J'ai eu beau chercher une solution, je ne trouve pas.

    J'ai premièrement voulu soustraire le timestamp du premier avril 2008 à minuit à l'heure du moment, puis diviser la réponse par le nombre de secondes contenu dans un mois. Un problème : Savoir si le mois contient 28, 29, 30 ou 31 jours, bref, que de complications.
    Admettons que je donne comme moyenne 365/12 (~30.41 de mémoire), il faut que j'applique la fonction floor() à la réponse de l'équation précédente, pour savoir si un mois entier s'est écoulé.
    Si c'est le cas, je fais une boucle, et c'est ici que j'ai stoppé. Il faudrait que j'additionne le nombre de mois écoulés à la première date, vérifier s'il est plus grand que 12, si c'est le cas changer l'année, etc.

    Bref, vous vous rendez compte que ça serait très dûr à lire, pas clair du tout et sujet à beaucoup de bugs.

    Je me demandais (et j'espère ^^) s'il y a une solution plus simple à mon problème.

    Merci d'avance,

    Jihnn

    P.S. Désolé pour le mauvais emplacement du topic précédent, j'espère que cette fois c'est la bonne

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565

  3. #3
    Membre régulier Avatar de Badaboumpanpan
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 202
    Points : 80
    Points
    80
    Par défaut
    Je ne suis pas sûr de comprendre ce que tu veux faire...

    Un système d'archives regroupées par mois ?

    Que tu consultes ensuite ?

    Tu veux lister les mois qui sépare la date que tu choisis et maintenant ?

    Bon je suis débutant alors peut être que mon script est pourri... mais je le mets quand même !!!

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    <?php
    /*
    * Fonction month permettant d'avoir le mois textuel
    */
    function month($mois) {
      switch ($mois) {
        case 1:
          $month = "Janvier";
          break;
        case 2:
          $month = "Février";
          break;
        case 3:
          $month = "Mars";
          break;
        case 4:
          $month = "Avril";
          break;
        case 5:
          $month = "Mai";
          break;
        case 6:
          $month = "Juin";
          break;
        case 7:
          $month = "Juillet";
          break;
        case 8:
          $month = "Août";
          break;
        case 9:
          $month = "Septembre";
          break;
        case 10:
          $month = "Octobre";
          break;
        case 11:
          $month = "Novembre";
          break;
        case 12:
          $month = "Décembre";
          break;
      }
      return $month;
    }
     
    /*
    * Retour de la date choisie
    */
    $choix = '2006-4-1';
    $choix = explode('-',$choix);
    $ch_an = $choix[0];
    $ch_mo = $choix[1];
    $ch_jo = $choix[2];
     
    /*
    * Récupération de la date du jour
    */
    $annee = date(Y);
    $mois = date(n);
    $jour = date(j);
     
    /*
    * Détermination du premier passage
    */
    $first = 0;
     
    /*
    * Affichage des mois entre la date choisie et aujourd'hui
    */
    while ($ch_an <= $annee) {
    /*
    * Année(s) antérieure(s)
    */
      if ($ch_an < $annee) {
        // premier passage
        if ($first == 0) {
          while ($ch_mo <= 12) {
            $month = month($ch_mo);
            echo $month." ".$ch_an."<br>";
            $ch_mo++;
          }
          $first = 1;
        // autres passages
        } else {
          $ch_mo = 01;
          while ($ch_mo <= 12) {
            $month = month($ch_mo);
            echo $month." ".$ch_an."<br>";
            $ch_mo++;
          }
        }
    /*
    * Année actuelle
    */
      } else if ($ch_an == $annee) {
        // premier passage
        if ($first == 0) {
          while ($ch_mo <= $mois) {
            $month = month($ch_mo);
            echo $month." ".$ch_an."<br>";
            $ch_mo++;
          }
        // autres passages
        } else {
          $ch_mo = 01;
          while ($ch_mo <= $mois) {
            $month = month($ch_mo);
            echo $month." ".$ch_an."<br>";
            $ch_mo++;
          }
        }
      }
      $ch_an++;
    }
    ?>

  4. #4
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    @Fladnag : Merci, mais mon problème ne se situait pas à ce niveau, je suis capable de créer un timestamp

    @Badaboumpanpan : Je ne cherche pas un script déjà fait (premièrement parce que je déteste recopier bêtement le travail des autres, deuxièmement parce que je monte mon site pour programmer ), par contre il y a certaines pistes, je vais voir de ton côté.

    Voici mon code pour ceux que ça intéresse :

    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
    <?php
    	if (isset($_GET['mois'], $_GET['an']))
    	{
    	}
    	else
    	{
    		$firstMonth = 5;
    		$firstYear = 2008;
    		$currMonth = date('n');
    		$currYear = date('Y');
     
    		$now = mktime(0,0,0,$currMonth,1,$currYear);
    		while (mktime(0,0,0,$firstMonth,1,$firstYear) < $now)
    		{
    			if ($firstMonth > 12)
    			{
    				$firstMonth = 1;
    				$firstYear++;
    			}
    			else
    			{
    				echo '<a href="index.php?page=archives&mois=' . $firstMonth . '&an=' . $firstYear . '">' . getMois($firstMonth) . ' ' . $firstYear . '</a><br />';
    				$firstMonth++;
    			}
    		}
    	}
    ?>
    getMois() (Oui franglais, j'ai réalisé trop tard... ) ne fait que retourner le nom en lettres du mois)

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    avec strtotime, tu n'as pas besoin de réflechir aux changement d'années, aux moins de 29, 30 ou 31 jour, il gere tout ca tout seul

    Tu prend une date correspondant au 1er du mois courant et tu fait "+1 months" ou "-1 months" pour générer le timestamp souhaité.

    Quand tu veux t'arreter, tu récupere le numéro du mois du timestamp généré (avec date()) et tu le compare a ta valeur d'arret.

    Pour générer le 1er du mois courant, utilise mktime

    Sinon, si tu n'aime pas strtotime, tu peux tout générer avec mktime en incrémentant le numero du mois (il "normalise" aussi tout seul, ca marche si tu lui donne 578 en numero de mois, il va comprendre +2 mois +48 années ^^)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage de tous les mois courbes
    Par paola2014 dans le forum SSRS
    Réponses: 3
    Dernier message: 11/09/2014, 16h44
  2. [2008R2] Histogramme - Affichage de tous les mois
    Par Melow57 dans le forum SSRS
    Réponses: 1
    Dernier message: 23/06/2014, 11h55
  3. Affichage de tous les mois
    Par redoran dans le forum Langage SQL
    Réponses: 30
    Dernier message: 07/05/2012, 16h37
  4. Affichage de tous les mois d'un calendrier
    Par sajodia dans le forum Langage
    Réponses: 4
    Dernier message: 03/03/2011, 14h58
  5. Réponses: 3
    Dernier message: 11/11/2006, 07h14

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