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; }
utilisez DatePeriod c'est fait pour
Partager