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.