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] Manipulation des dates/semaines


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 68
    Points : 39
    Points
    39
    Par défaut [Dates] Manipulation des dates/semaines
    Bonjour,

    L'un des trucs le plus casse c*****, la gestion/manipulation des dates.
    Je cherche à faire 2 choses :

    1- Ecrire une fonction que me renvoi le nombre de semaines dans l'année passée en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function nbSemaine($annee){
        ...
        return $nbSemaine;
    }
    2- Une autre fonction me donnerais la date complète du lundi par rapport au numéro de semaine passé en paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function dateLundi($noSemaine){
        ...
        return $date; //Renvoi de la date du lundi au format YYYY-MM-DD de la semaine passée en paramètre
    }
    Si quelqu'un pouvait me donner un coup de main .

    Merci à tous

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    La première fonction est assez simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function nbSemaine($annee){
        return 52;
    }


    Après pour la deuxième cela doit pouvoir se faire assez facilement je pense

    Un truc dans ce goût là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    function dateLundi($annee,$semaine) {
    	$i=0;
    	do {
    		$ladate = mktime(0,0,0,1,($semaine+$i)*7,$annee);
    		if (date('W',$ladate) == $semaine) {
    			if (date('w',$ladate) == 0) {
    				$lundi = mktime(0,0,0,date('n',$ladate),date('j',$ladate)-6,$annee);
    			}
    			else {
    				$lundi = mktime(0,0,0,date('n',$ladate),date('j',$ladate)+1-date('w',$ladate),$annee);
    			}
    			break;
    		}
    		elseif (date('W',$ladate) > $semaine) $i--;
    		else $i++;
     
    	}while(abs($i)>3);
    	return $lundi;
    }
     
    echo date('d/m/Y',dateLundi(2007,14) );
    On peut surement faire plus propre. Notamment au niveau du do/while et des if sur le jour de la semaine pour trouver le lundi. Et il faut vérifier ce qui se passe en fin/début d'année ( genre semaine 1 et semaine 52 )

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Une année peut compter 53 semaines. Cela se reproduit alternativement tous les 5 et 6 ans. Exemple : les années 1998, 2004, 2009, 2015, etc ... comportent 53 semaines.

    Et pour le calcul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
    	function nbSemaine($annee)
    	{
    		$timestampDernierJour = mktime(0, 0, 0, 12, 31, $annee);
    		//-- si le 31-12 de l'année se trouve dans la semaine N°1 de l'année suivante ---
    		//-- le nombre de semaine = le N° de semaine du dimanche précédent --------------
    		//-- sinon le nombre de semaine = le N° de semaine du 31-12 ---------------------
    		$nombre = (date('W', $timestampDernierJour) == 1) ? 
    							 date('W', strtotime('last sunday', $timestampDernierJour)) : 
    							 date('W', $timestampDernierJour);
    		return $nombre;
    	}
     
    	function dateLundi($annee, $numSemaine)
    	{
    		$timestampPremierJanvier = mktime(0, 0, 0, 1, 1, $annee);
    		$semainePremierJanvier = date('W', $timestampPremierJanvier);
    		$jourPremierJanvier = date('w', $timestampPremierJanvier);
     
    		//-- si le 1er janvier de l'année n'est pas un lundi ----------------------------
    		//-- le timestamp du début de semaine est celui du lundi précédent --------------
    		//-- sinon le timestamp du début de semaine est celui du 1er janvier ------------
    		$lundi = ($jourPremierJanvier != 1) ? 
    							strtotime('last monday', $timestampPremierJanvier) : 
    							$timestampPremierJanvier;
     
    		//-- si le 1er janvier ne se trouve pas dans la semaine N°1 ---------------------
    		//-- le timestamp du lundi de la semaine N°1 est celui du lundi suivant ---------
    		if ($semainePremierJanvier > 1)
    		{
    			$lundi = strtotime('+1 week', $lundi);
    		}
     
    		return date('d-m-Y', strtotime('+' . ($numSemaine - 1) . ' week', $lundi));
    	}
    //---------------------------------------------	
    //---------------------------------------------	
    	$annee = 2008;
    	$numSemaine = 10;
     
    	echo 'l\'année ' . $annee . ' compte ' . nbSemaine($annee) . ' semaines<br>';
    	echo 'la semaine N° ' . $numSemaine . ' de l\'année ' . $annee . ' commence le lundi ' . dateLundi($annee, $numSemaine) . '<br>';
    ?>

Discussions similaires

  1. [JDBC] manipulation des dates
    Par zais_ethael dans le forum JDBC
    Réponses: 3
    Dernier message: 11/12/2005, 19h55
  2. [JDBC] manipulation des dates/heures en Java
    Par kurkLord dans le forum JDBC
    Réponses: 6
    Dernier message: 09/08/2004, 12h49
  3. Manipulations des Dates
    Par kurtc dans le forum Langage SQL
    Réponses: 11
    Dernier message: 13/04/2004, 14h39
  4. [IB6][BCB5]Manipulation des dates.
    Par Sitting Bull dans le forum SQL
    Réponses: 4
    Dernier message: 09/04/2004, 15h33
  5. Manipuler des dates...
    Par Ti Jen-tsie dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2003, 11h46

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