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 :

Lister toutes les semaines d'une années


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2017
    Messages : 60
    Par défaut Lister toutes les semaines d'une années
    Bonjour,
    J'ai tenté un petit truc pour récupérer toutes les semaines d'une année en PHP, exemple : (18 du 29/04 au 05/05). Il fonctionne très bien, sauf pour l'année 2018 et 2024, il me retourne : (18 du 29-04 au 29-04), il est donc incapable de m'afficher le jour de fin de la semaine

    Voici le code :
    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
    $date_test = $_GET['year']."-12-31";
    $good_format=strtotime ($date_test);
    $dernierJourDéc = date('W',$good_format);
    $date_test2 = $_GET['y']."-12-28";
    $good_format2=strtotime ($date_test2);
    $derniereSemaineDéc = date('W',$good_format2);
     
    if ($dernierJourDéc >= 01 && $derniereSemaineDéc == 52) {
    	  for($sCount = 1; $sCount < 53; $sCount++){
    	    //-- les paramètres ------------
    	    $numSemaine = $sCount;
    	    $annee = $_GET['y'];
    	    $timeStampPremierJanvier = strtotime($annee . '-01-01');
    	    $jourPremierJanvier = date('w', $timeStampPremierJanvier);
     
    	    //-- recherche du N° de semaine du 1er janvier -------------------
    	    $numSemainePremierJanvier = date('W', $timeStampPremierJanvier);
     
    	    //-- nombre à ajouter en fonction du numéro précédent ------------
    	    $decallage = ($numSemainePremierJanvier == 1) ? $numSemaine - 1 : $numSemaine;
    	    //-- timestamp du jour dans la semaine recherchée ----------------
    	    $timeStampDate = strtotime('+' . $decallage . ' weeks', $timeStampPremierJanvier);
    	    //-- recherche du lundi de la semaine en fonction de la ligne précédente ---------
    	    $jourDebutSemaine = ($jourPremierJanvier == 1) ? date('d-m', $timeStampDate) : date('d/m', strtotime('last monday', $timeStampDate));
    	    $jourFinSemaine = ($jourPremierJanvier == 1) ? date('d-m', $timeStampDate) : date('d/m', strtotime('next sunday', $timeStampDate));
    	    echo $numSemaine. " du " .$jourDebutSemaine. " au " .$jourFinSemaine;
     
    	}
    }
     
    if ($dernierJourDéc >= 01 && $derniereSemaineDéc == 53) {
    		for($sCount = 1; $sCount < 54; $sCount++){
    			//-- les paramètres ------------
    			$numSemaine = $sCount;
    			$annee = $_GET['year'];
    			$timeStampPremierJanvier = strtotime($annee . '-01-01');
    			$jourPremierJanvier = date('w', $timeStampPremierJanvier);
     
    			//-- recherche du N° de semaine du 1er janvier -------------------
    			$numSemainePremierJanvier = date('W', $timeStampPremierJanvier);
     
    			//-- nombre à ajouter en fonction du numéro précédent ------------
    			$decallage = ($numSemainePremierJanvier == 1) ? $numSemaine - 1 : $numSemaine;
    			//-- timestamp du jour dans la semaine recherchée ----------------
    			$timeStampDate = strtotime('+' . $decallage . ' weeks', $timeStampPremierJanvier);
    			//-- recherche du lundi de la semaine en fonction de la ligne précédente ---------
    			$jourDebutSemaine = ($jourPremierJanvier == 1) ? date('d-m', $timeStampDate) : date('d/m', strtotime('last monday', $timeStampDate));
    			$jourFinSemaine = ($jourPremierJanvier == 1) ? date('d-m', $timeStampDate) : date('d/m', strtotime('next sunday', $timeStampDate));
    			echo $numSemaine. " du " .$jourDebutSemaine. " au " .$jourFinSemaine;
     
    	}
    }
    Pouvez m'aidez à débugger un peu tous ça ?
    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Par défaut
    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
    <?php
     
    $annee = filter_input(INPUT_GET, 'year', FILTER_VALIDATE_INT, ['min_range'=>1970, 'max_range'=>2038]);
    if($annee) {
      $date = new DateTime("first monday of january $annee");
      // si ce n'est pas la première semaine alors reculer d'un lundi
      if($date->format('W') > 1) $date->modify('previous monday');
      do {
        echo $date->format('W'); // numéro de la semaine
        echo ' du ', $date->format('d/m'); // du lundi
        echo ' au ', $date->modify('next sunday')->format('d/m'), '<br>'; // au dimanche
        // calculs du début de la prochaine semaine qui est demain
      } while ($date->modify('tomorrow')->format('W') > 1); // tant que le numéro de la semaine est supérieur à 1
    }
     
    ?>
    <form>
      <input type="number" name="year" min="1970" max="2038" value="<?= $annee ? $annee : date('Y') ?>">
      <input type="submit">
    </form>

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2017
    Messages : 60
    Par défaut
    Hé bien, pour être rapide et efficace, je ne trouverai pas mieux
    Je n'en demandais pas autant, mais si vous me proposer un code parfaitement fonctionnel, et d'une bien meilleure qualité que le mien, alors je dis oui!!!
    Merci beaucoup daniel61 !!!

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

Discussions similaires

  1. Comment lister toutes les tables d'une BD ?
    Par jmulans dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/11/2007, 19h29
  2. Lister tous les jours d'une année
    Par Delphi-ne dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/02/2007, 18h10
  3. Réponses: 2
    Dernier message: 14/08/2006, 19h23
  4. [debutant] lister tout les mots d'une page web!
    Par kriskikout dans le forum Web
    Réponses: 20
    Dernier message: 31/05/2006, 22h47
  5. [MySQL] lister toutes les tables d'une base
    Par Tr@nkill dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2006, 14h45

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