[RESOLU] Récupérer le nombre de semaines d'un mois

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Récupérer le nombre de semaines d'un mois

Re: Récupérer le nombre de semaines d'un mois

par kevin254kl » 07 avr. 2018, 19:56

Super merci.

Re: Récupérer le nombre de semaines d'un mois

par tesmet » 06 avr. 2018, 19:25

Ce n'est pas particulier à DateTime car strtotime()/date() produiront le même résultat. La semaine appartient à l'année ayant le plus de jours, comme 2018-12-31 est un lundi alors les 6 autres jours de cette semaine là seront de janvier 2019 et donc le lundi 31 décembre 2018 sera à la fois le dernier jour de 2018 et le premier jour de la première semaine de 2019. L'inverse peut aussi se produire comme en 2016 où les 3 premiers jours de janvier appartenaient à la 53e semaine de 2015.

Le code semble vouloir compter le nombres de semaines complètes et incomplètes qu'il y a dans un mois ?
https://3v4l.org/WoAiN

Code : Tout sélectionner

<?php // php7 ? $tests = [ '2016-01','2016-02','2016-03','2016-04','2016-05','2016-06','2016-07','2016-08','2016-09','2016-10','2016-11','2016-12', '2018-01','2018-02','2018-03','2018-04','2018-05','2018-06','2018-07','2018-08','2018-09','2018-10','2018-11','2018-12', ]; foreach($tests as $test) { $start = new DateTime($test); $end = intval((clone $start)->modify('last day of this month')->format('W')); if($end < 2) $end = intval((clone $start)->modify('last sunday of this month')->format('W')) + 1; // pour changer 1 en 52 ou 53 $start = intval($start->format('W')); if($start > 51) $start = 0; // pour changer 52 ou 53 en 0 $weeks = $end - $start + 1; echo "$test = $weeks<br>"; }

Re: Récupérer le nombre de semaines d'un mois

par Maitrepylos » 06 avr. 2018, 11:25

Ben en fait c'est logique :
La première semaine commence au 01/01/2019 et DateTime prend du lundi au Dimanche
Le 01/01/2019 étant un mardi , la première semaine commence le lundi précédent, ce qui donne le 31 décembre 2018 .

Re: Récupérer le nombre de semaines d'un mois

par kevin254kl » 06 avr. 2018, 11:15

Merci de ta réponse,

Par contre je ne comprends pas trop pourquoi pour datetime elle appartient a la première semaine 2019? pour que la fonction reste lisible je dois passer par l'objet date sans utiliser datetime?

Re: Récupérer le nombre de semaines d'un mois

par Maitrepylos » 03 avr. 2018, 11:44

C'est une des particularité de DateTime dont on doit tenir compte.
Le 31/12/2018 , ne fais pas partie de la 52 ième semaine de 2018, mais bien de la première semaine de 2019.

Récupérer le nombre de semaines d'un mois

par kevin254kl » 02 avr. 2018, 14:50

Bonjour a tous,

Je fais un calendrier en php qui fonctionne sauf pour le mois de décembre. En effet le nombre de semaine ne correspond pas.
J'ai une classe avec l'année et le mois je sélectionne le premier jour

Code : Tout sélectionner

public function getStartingDay (): \DateTime { return new \DateTime("{$this->year}-{$this->month}-01"); }
J'ai ensuite la fonction pour récupérer le nombre de semaine affiché dans une boucle.

Code : Tout sélectionner

public function getWeeks() : int{ // begining month $start = $this->getStartingDay(); //last day in the month $end = (clone $start)->modify('+1 month -1 day'); $weeks = intval($end->format('W')) - intval($start->format('W')) + 1; if($weeks < 0){ $weeks = intval($end->format('W')); } var_dump( $end); return $weeks; }
mais le dump de la variable end et start donne

Code : Tout sélectionner

string(26) "2018-12-31 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(DateTime)#3 (3) { ["date"]=> string(26) "2018-12-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } 1weeks"> object(DateTime)#3 (3) { ["date"]=> string(26) "2018-12-31 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(DateTime)#4 (3) { ["date"]=> string(26) "2018-12-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(DateTime)#5 (3) { ["date"]=> string(26) "2018-12-31 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(DateTime)#4 (3) { ["date"]=> string(26) "2018-12-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" }
On voit qu'il me dis 1 weeks alors que pour les autres mois j'ai bien le bon nombre de lundi juqu'a la fin du mois.
Merci de votre aide.