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 :

[Dates] Nombre de semaines dans le mois


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut [Dates] Nombre de semaines dans le mois
    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...

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    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);

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Ouais!! Merci

  4. #4
    Membre confirmé Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Points : 547
    Points
    547
    Par défaut
    Citation Envoyé par goodpz Voir le message
    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;
    }

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Salut tout le monde,

    Voila une autre méthode pour le faire

    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);
    }
    Voila bonne journée a tous

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    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;
    }

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    utilisez DatePeriod c'est fait pour

  8. #8
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    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 );
    }

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/06/2009, 08h56
  2. Date : Nombre de jour dans le mois
    Par grunk dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 29/07/2008, 16h48
  3. [Dates] Nombre de mercredis dans un mois
    Par jgoguel dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2007, 09h07
  4. nombre de semaines dans un mois ?
    Par isachat666 dans le forum Langage
    Réponses: 12
    Dernier message: 06/08/2007, 19h46
  5. [Dates] Calculer le nombre de jours dans le mois suivant...
    Par Life Hunter dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2006, 00h01

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