Comment fait-on pour calculer le nombre de semaine dans un mois donné? J'ai fais beaucoup de recherche mais ca semble être quelque chose de complexe...
Comment fait-on pour calculer le nombre de semaine dans un mois donné? J'ai fais beaucoup de recherche mais ca semble être quelque chose de complexe...
Pas si trivial que ça mine de rien. Voilà ce que j'ai pu faire, et ça semble bien fonctionner:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 function weeksPerMonth($month, $year) { $day = mktime(1, 1, 1, $month, 1, $year); $nday = mktime(1, 1, 1, $month, date('t', $day), $year); $week = date('W', $day); $nweek = date('W', $nday); $lweek = date('W', mktime(1, 1, 1, 12, 28, $year)); if ($nweek > $week) $res = $nweek - $week; else if ($lweek > $week) $res = $nweek + $lweek - $week; else $res = (int)$nweek; return $res + 1; } echo weeksPerMonth(3, 2007);
Non en effet pas si trivial
ta fonction pose problème sur certains mois tel que Août et novembre 2008.
Je propose donc une V2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function weeksPerMonth($m,$y){ $day = mktime(1, 1, 1, $m, 1, $y); $nday = date('t', $day); $fday = date("N",$day); $xday = $nday + $fday; $n = $xday % 7 != 0 ? floor($xday/7) +1 : floor($xday/7); return $n; }
Salut tout le monde,
Voila une autre méthode pour le faire
Voila bonne journée a tous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 function getNbWeeks($year, $month) { $nday = date('t', mktime(0, 0, 0, $month + 1, 0, $year)); $n = ($nday % 7 != 0 ? floor($nday/7) +1 : floor($nday/7)); return ((date('N', mktime(0,0,0, $month, 1, $year))) == 7 ? $n + 1 : $n); }
La fonction de Jouana ne fonctionne pas pour le mois d'octobre 2011.
nday = 31
n = 5
Le premier du mois est un samedi == 6 -> la fonction renvoie "5" (semaines) au lieu de 6.
Je propose ça. Dites moi si vous voyez des erreurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function getNumberOfWeeks($year, $month) { $time = mktime(0, 0, 0, $month, 1, $year); $dayInMonth = date('t', $time); if($dayInMonth == 28) return date('N', $time) == 1 ? 4 : 5; if($dayInMonth == 29) return 5; if($dayInMonth == 30) return date('N', $time) == 7 ? 6 : 5; return date('N', $time) < 6 ? 5 : 6; }
C'est déjà répondu même si je déterre le sujet, j'ai une autre solution ce problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function getNumberOfWeeks ($date){ $jour1 = date_format($date, 'N'); // pour les dates du lundi au dimanche - du dimanche au lundi utilisez 'w' à la place de 'N' $nbjour = date_format($date, 't'); $NB_semaineParMois = ceil(($nbjour + $jour1 - 1) / 7 ); }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager