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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Fonction de prise en compte des jours fériés en php


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2014
    Messages : 40
    Points : 35
    Points
    35
    Par défaut Fonction de prise en compte des jours fériés en php
    Bonjour,
    Dans le cadre du développement d'une application WEB, je propose à mes agents de poser leurs jours de congés. Je souhaitais ne pas déduire les jours fériés ainsi que les week-end (samedi - dimanche).
    J'ai trouvé une fonction permettant de gérer les jours fériés fixes et mouvants. Voici le code :
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    <?php
        function isNotWorkable($date)
        {
     
              if ($date === null)
              {
                $date = time();
              }
     
             $date = strtotime(date('m/d/Y',$date));
     
             $year = date('Y',$date);
     
            $easterDate  = easter_date($year);
            $easterDay   = date('j', $easterDate);
            $easterMonth = date('n', $easterDate);
            $easterYear   = date('Y', $easterDate);
     
            $holidays = array(
            // Dates fixes
            mktime(0, 0, 0, 1,  1,  $year),  // 1er janvier
            mktime(0, 0, 0, 5,  1,  $year),  // Fête du travail
            mktime(0, 0, 0, 5,  8,  $year),  // Victoire des alliés
            mktime(0, 0, 0, 7,  14, $year),  // Fête nationale
            mktime(0, 0, 0, 8,  15, $year),  // Assomption
            mktime(0, 0, 0, 11, 1,  $year),  // Toussaint
            mktime(0, 0, 0, 11, 11, $year),  // Armistice
            mktime(0, 0, 0, 12, 25, $year),  // Noel
     
            // Dates variables
            mktime(0, 0, 0, $easterMonth, $easterDay + 1,  $easterYear),
            mktime(0, 0, 0, $easterMonth, $easterDay + 39, $easterYear),
            mktime(0, 0, 0, $easterMonth, $easterDay + 50, $easterYear),
            );
     
          return in_array($date, $holidays);
        }
    ?>
    <html>
    	<form method="post" action="essai_heure.php" enctype="multipart/form-data">
    		<fieldset style='background:#c4ddf1; width:100%; height:160px;'>
    			<legend style='background:#9c8d87; color:white; width:60%; height:24px; size: 16px;'>Validation</legend>
    				<!-- Date début des vacances -->
    				<label for 'date_posee' align='right'>Date Souhaitée</label><br/>
    				<label for 'date_posee' align='right'>Du (inclus) : </label><input type='date' style='background:url("images/design/date.png") #fafafa 10px center no-repeat;width:30%;' name='date_posee_du' id='date_posee_du'  />
    				<label for 'date_posee' align='right'>A : </label>
    				<select name="time_du" id='time_du' style='#fafafa 10px center no-repeat;width:15%; text-align: right; height: 20%;'>
    					<option value="08:00:00">8h00</option>
    					<option value="12:00:00">12h00</option>
    				</select><br/>
    				<!-- Date fin des vacances -->
    				<label for 'date_posee' align='right'>Au (inclus) : </label><input type='date' style='background:url("images/design/date.png") #fafafa 10px center no-repeat;width:30%;' name='date_posee_au' id='date_posee_au'  />
    				<label for 'date_posee' align='right'>A : </label>
    				<select name="time_au" id='time_au' style='#fafafa 10px center no-repeat;width:15%; text-align: right; height: 20%;'>
    					<option value="12:00:00">12h00</option>
    					<option value="17:30:00">17h30</option>
    				</select><br/>
    				<!-- Nombre de jours -->
    				<!-- Ce nombre de jour est à vérifier au travers du décompte -->
    				<label for 'vacances_posees' align='right'>Nombre Jours Décomptés : </label><input type='number' style='background:url("images/design/numero.png") #fafafa 10px center no-repeat;width:20%;' name='vacances_posees' id='vacances_posees' min='0' max='<?php echo $vacDroit;?>' />
    				<input type="submit" name="enregistrer_vac" value="Enregistrer" />
    				<input type="submit" value="Retour"  onclick="history.go(-2)" />
    		</fieldset>
    	</form>
    </html>
    <?php
    if (!empty($_POST['enregistrer_vac'])){
    	echo "Les vacances du : ".$_POST['date_posee_du']." a ".$_POST['time_du']."<br/>";
    	echo "Les vacances du : ".$_POST['date_posee_au']." a ".$_POST['time_au']."<br/>";
    	echo "Nombre de jours pris : ".$_POST['vacances_posees']."<br/>";
    	// Mise en forme des dates pour insertion table "absence_personnel"
    	$date_debut_vacances= date("Y-m-d H:i:s", strtotime($_POST['date_posee_du']." ".$_POST['time_du']));
    	$date_fin_vacances=date("Y-m-d H:i:s", strtotime($_POST['date_posee_au']." ".$_POST['time_au']));
    	$date_premier_jour_vac=date("Y-m-d", strtotime($_POST['date_posee_du']));
    	$id_agent=2;
    	$nom_agent="XXXXX XXXXXXXXXXXX";
    	// Appel de la fonction pour vérifier les jours posés
    	// A ce stade, je ne vérifie que le premier jour
    	// Je ferais une boucle foreach pour traiter tous les jours posés
    	if(isNotWorkable(date("Y-m-d H:i:s", strtotime($_POST['date_posee_du']." ".$_POST['time_du'])))){
    		echo 'Nous sommes un jour férié !! Apéro !!';
        }else{
    		echo 'Nous sommes un jour normal, au boulot :p';
        }
     
    	// Connexion à la base de données
    	include("menu//chiens.php");
    	$req = $bdd->prepare('INSERT INTO `absence_personnel` (`ID_AGENT`,`NOM_AGENT`,`DATE_DEBUT_VACANCES`, `DATE_FIN_VACANCES`,`NOMBRE_JOURS_POSES`) VALUES(:id_agent, :nom_agent, :date_debut_vacances, :date_fin_vacances, :nombre_jours_poses)');
    	$req->execute(array('id_agent'=>$id_agent, 'nom_agent'=>$nom_agent, 'date_debut_vacances'=>$date_debut_vacances, 'date_fin_vacances'=>$date_fin_vacances, 'nombre_jours_poses'=>$nombre_jours_poses));
    	/*Messages d'erreur de validation*/
    	$bdd ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    }
    else{
    	echo "il faut saisir un truc";
    }
    ?>
    J'ai bien l'insertion dans la table mais j'ai le message suivant :
    Notice: A non well formed numeric value encountered in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\GestParq_Version1.1\essai_heure.php on line 10

    Je ne comprends pas. J'ai modifié le format de la date, j'ai changé le DateTime rien n'y fait. J'ai toujours ce message qui s'affiche.

    Auriez vous une solution ?

    Par avance merci.

  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
    Ta ligne 11 doit simplement être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = strtotime($date);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/09/2008, 16h41
  2. Requête avec prise en compte des jours ouvrés
    Par guenfood dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 25/02/2008, 16h36
  3. [MS-DOS] Prise en compte des accents
    Par Furius dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 15/11/2005, 14h30
  4. Prise en compte des réponses des posteurs
    Par hunter dans le forum Evolutions du club
    Réponses: 152
    Dernier message: 05/11/2005, 23h40
  5. Prise en compte des contraintes
    Par potanie dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/11/2004, 11h00

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