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 :

Utilisation de la fonction date dans une fonction


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Brebiou
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 86
    Points : 88
    Points
    88
    Par défaut Utilisation de la fonction date dans une fonction
    Bonjour à tous,

    J'ai codé une petite fonction simple me permettant de récupérer la date de tout les samedis de l'année. Je me sers pour cela de la fonction date() et mktime().

    Elle fonctionnait bien jusqu’à la mise à jour en ce début d'année (la fonction alimente une BDD tout les 1er du mois). En effet, si vous l'exectuter tel quel, vous remarquerez un décalage d'une journée lors du passage au mois de mars, le premier samedi est le 07/03, et la fonction retourne 06/03, et conserve ce décalage jusqu'a la fin de l'année.

    J'avoue être perdu, et c'est pour cela que je me tourne vers vous =)

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?php
     
    	// Récupération de l'année courante
    	$annee_courante = date('Y');
    	// Récupération du mois courant
    	$mois_courant = date('n');
    	// Variable verrou pour l'incrementation de l'année
    	$lock = 0;
    	// Création d'un timestamp positionné au premier du mois courant de l'année courante
    	$timestamp_an = mktime(0,0,0,$mois_courant,1,$annee_courante);
    	// Récupération du jour de la semaine du premier jour du mois
    	$jour_semaine = date('w',$timestamp_an);
    	// Comparaison pour définir ou se situe le premier samedi du mois par rapport au premier jour du mois
    	if($jour_semaine<>6)
    		{
    		switch ($jour_semaine) 
    			{
    			case 0:
    				$decalage=6;
    				break;
    			case 1:
    				$decalage=5;
    				break;
    			case 2:
    				$decalage=4;
    				break;
    			case 3:
    				$decalage=3;
    				break;
    			case 4:
    				$decalage=2;
    				break;
    			case 5:
    				$decalage=1;
    				break;
    			} 
    		}
    		else
    		{
    		$decalage=0;
    		}
    	$j=0;
    	// Boucle de création de deux tableaux répertoriant les dates des samedi et du mois associés sur l'année entière
    	for($i=0;$i<=52;$i++)
    		{
    		$samedi=date("d" , mktime(0,0,0,$mois_courant,1+$j+$decalage,$annee_courante));
    		$mois=date("m" , mktime(0,0,0,$mois_courant,1+$j+$decalage,$annee_courante));
    		$tab_samedi[$i]=$samedi;
    		$tab_mois[$i]=$mois;
    		$j=$j+7;
    		// Si le mois courant est Janvier et que l'on est a plus de 5 tours dans la boucle, alors on incremente l'année
    		if ($mois_courant == 1 && $i > 6 && $lock == 0) 
    			{
    			$annee_courante = $annee_courante + 1;
    			$lock = 1; // Verrouillage de la condition, pour ne l'executer qu'une seule fois
    			}
    		}
    		// Debug
    		for($i=0;$i<=52;$i++)
    		{
    		echo $tab_samedi[$i].'/'.$tab_mois[$i].'<br />';
    		}
     
    ?>
    Merci d'avance pour vos avis éclairés.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $day = new DateTime("2014-12-31");
    for($day->modify('next saturday'); $day->format('Y') <= 2015; $day->modify('next saturday')) {
        echo '<br/>' . $day->format('d/m/Y');
    }

  3. #3
    Membre régulier Avatar de Brebiou
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 86
    Points : 88
    Points
    88
    Par défaut
    Merci sabotage pour cette fonction, je ne connaissait pas DateTime, c'est très complet.

    J'ai donc intégrer le tout à mon code et plus de souci.

    Merci encore

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

Discussions similaires

  1. Intégrer une fonction EQUIV dans une fonction INDIRECT
    Par Dgardian dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/12/2010, 15h33
  2. Réponses: 10
    Dernier message: 14/03/2009, 13h36
  3. [AJAX] [XAJAX] Lancer une fonction JS dans une fonction AJAX
    Par sixieme-sens dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/12/2008, 15h26
  4. Réponses: 1
    Dernier message: 25/10/2007, 21h25
  5. [VBA-E] Une fonction Excel dans une fonction VBA
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/07/2006, 10h21

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