Partage
  • Partager sur Facebook
  • Partager sur Twitter

nombre de semaines dans une année

que se passe-t-il si l'année n'est pas encore passée?

Sujet résolu
    23 décembre 2024 à 14:34:41

    Bonjour à tous.

    Je butte devant un problème tout bête.

    Je cherche le nombre de semaines dans une année.

    Je recherche donc la semaine du dernier jour de l'année.

    j'utilise la fonction Date comme suit:

    $annee=2020;
    
    echo Date('W',mktime(0, 0, 0, 12, 31, $annee));

    pour $annee = 2024 j'obtiens 01 pareil 2025 par contre 2026 j'obtiens bien 53

    Pour 2027et 2028 j'obtiens bien 52

    par contre de nouveau pour 2029 2030 2031 j'obtiens 01

    et en 2032 j'obtiens bien 53, en 2033 et 2034 j'obtiens 52 mais de nouveau en 2035, 2036 j'obtiens 01 puis en 2037 j'obtiens bien 53!

    2038, 2039 j'obtiens bien 52 et de nouveau en 2040 j'obtiens 01 au lieu de 52.

     en reculant j'ai trouvé aussi 2019, 2018 qui donne 01 par contre 2016 et 2017 donne bien 52 semaines ( parce que 2015 donne 53 semaines)

    Il y a quelque chose de périodique après les années à 53 semaines, 2 années sont justes les autres non!

    je ne vois pas ce qui ne va pas dans ma programmation.

    Merci d'avance pour votre aide éclairée.

    Jean-Marc

    • Partager sur Facebook
    • Partager sur Twitter
      23 décembre 2024 à 15:56:48

      Bonjour, en faisant des tests je fais le même constat: pour certaines années cette fonction renvoie 01. Je ne connais pas la cause mais tu peux faire ceci à la place:
      $date = "$year-12-31";
      $dateObj = new DateTime($date);
      $numberOfDays = $dateObj->format("z");
      echo ceil($numberOfDays / 7);
      Tu peux tester ici: PHP Tester
      • Partager sur Facebook
      • Partager sur Twitter
        23 décembre 2024 à 16:12:04

        Bonjour,

        je n'ai pas de solution sous la main pour l'instant mais, Asmitta, ton code ne me semble pas marcher… Il renvoie 53 pour 2024 alors qu'il n'y a que 52 semaines.

        Le problème, de ce que je comprends, c'est que le 31 décembre n'est pas forcément dans la dernière semaine d'une année. Il peut être dans la première semaine de l'année d'après… Voilà ce que dit Wikipédia sur le calcul de la semaine 53 : cas de figure de la semaine 53.

        • Partager sur Facebook
        • Partager sur Twitter

        Pas d'aide concernant le code par MP, le forum est là pour ça :)

          23 décembre 2024 à 16:49:22

          Merci pour ton explication. Je comprends mieux le 01 pour certaines années. Il faut donc des vérifications supplémentaires.
          • Partager sur Facebook
          • Partager sur Twitter
            23 décembre 2024 à 18:36:18

            Ca ne vient pas de ton code, c'est le fonctionnement de W/la norme ISO 8601 :

            > W Numéro de semaine dans l'année ISO 8601, les semaines commencent le lundi

            https://en.wikipedia.org/wiki/ISO_week_date

            > If 31 December is on a Monday, Tuesday, or Wednesday it is in W01 of the next year. If it is on a Thursday, it is in W53 of the year just ending. If on a Friday it is in W52 of the year just ending in common years and W53 in leap years. If on a Saturday or Sunday, it is in W52 of the year just ending.

            $weeks = (int) date('W', mktime(0, 0, 0, 12, 31, $annee));
            if ($weeks < 52) {
                $weeks += 52;
            }
            echo $weeks;
            

            ?

            -
            Edité par julp 23 décembre 2024 à 18:55:38

            • Partager sur Facebook
            • Partager sur Twitter
              23 décembre 2024 à 19:41:48

              Merci à tous pour vos réponses.

              Effectivement le code fourni par Asmitta ne fonctionne pas.

              Merci à Julp pour l'explication théorique, mais il faut aussi tenir compte des années bissextiles autrement il peut y avoir une erreur.

              votre code, Julp, ne donne pas le bon résultat pour toutes les années.  exemple il donne 53 semaines pour 2030 alors qu'il y a 52 semaines .

              j'ai fait une petite fonction pour prendre en compte le fonctionnement théorique.

              public static function NB_semaines_an($annee_entree)
                 {
                    $annee_entree =(INT)$annee_entree;
                    // on recherche le 1er jour de l'année
                    $premier_jour = Date('l',mktime(0, 0, 0, 01, 01, $annee_entree));
                    // On recherche si l'année est bissextile
                    $bissextile = Date('L',mktime(0, 0, 0, 01, 01, $annee_entree));  // 1 bissextile 0 non
                    $Nb_semaines_an = ($premier_jour =='Thursday' or ($premier_jour =='Wednesday' and $bissextile ==1)) ?53 :52;	
                    return $Nb_semaines_an;
                 }

              Elle donne le bon résultat (testé jusqu'en 2050!)

              Merci encore à vous tous pour votre aide.

              Je clos le sujet car il est résolu.

              Jean-Marc

              -
              Edité par Jean-MarcEvrard 24 décembre 2024 à 15:46:35

              • Partager sur Facebook
              • Partager sur Twitter

              nombre de semaines dans une année

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown