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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    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 chevronné 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
    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 éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  4. #4
    Membre chevronné 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
    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 très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    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 averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    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 confirmé

    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
    Par défaut
    utilisez DatePeriod c'est fait pour

+ 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