Partage

Récupérer date entre 5 jours

21 juin 2018 à 23:01:44

Bonjour à tous,

Mon code me permet de calculer les heures de travail sur une semaine de 5 jours. Chaque jour il y a une heure total et tous les 5 jours ces valeurs sont additionnées histoire d'avoir également un total par semaine.

J'aimerais pouvoir afficher au dessus de chaque tableau semaine du 01/18 au 05/18...

Je voudrais l'afficher là : echo "<div class=\"compact\"><div class=\"contenu\"><div class=\"titre\">Semaine</div>";  

$sql = mysqli_query($bdd,"SELECT * FROM Travail ORDER BY date ");
$nbreElements = 5; // tous les 5 éléments 
$compteur = 0; // initialisation du compteur 
$counter = 0; 
echo "<div class=\"compact\"><div class=\"contenu\"><div class=\"titre\">Semaine</div>";  
echo "<table>"; 
   echo "<tr>"; 
       echo "<th>Date</th>"; 
       echo "<th>Entree</th>"; 
       echo "<th>Sortie</th>"; 
       echo "<th>Entree</th>";	   
       echo "<th>Sortie</th>"; 	
       echo "<th>Total journée</th>"; 
       echo "<th>Options</th>"; 	   
   echo "</tr>"; 

   
   while ($donnees = mysqli_fetch_assoc($sql)) {
		$data[] = $donnees['total_journee']; 
	echo '<form method="post" id="semi" action="index.php?id='.$donnees['id'].'" enctype="multipart/form-data">';
	echo '<input type="hidden" name="id" value="'.$donnees['id'].'">';
		echo "<tr>";    
		   echo "<td>".$donnees['Date']."</td>";  
		   echo "<td>";
		   $counter = $counter + 1; 

		   echo '<input class="cache" name="entree_am"  type="time"  value="'.$donnees['entree_am'].'" value="'.$donnees['entree_am'].'" "/>'; 
		   echo "<td>";		   
		   echo '<input class="cache" name="sortie_am"  type="time"  value="'.$donnees['sortie_am'].'" value="'.$donnees['sortie_am'].'" "/>'; 
		   echo "<td>";	
			echo '<input class="cache" name="entree_pm"  type="time"  value="'.$donnees['entree_pm'].'" value="'.$donnees['entree_pm'].'" "/>'; 
		   echo "<td>";		   
		   echo '<input class="cache" name="sortie_pm"  type="time"  value="'.$donnees['sortie_pm'].'" value="'.$donnees['sortie_pm'].'" "/>'; 
		   echo "<td>";	
		    
		   echo '<input type="text" id="moninput'.$counter.'" name="total_journee" onKeyUp="afficher_span'.$counter.'(event, this.value, 3'.$counter.');" value="'.$donnees['total_journee'].'" style="display:none;"/>';	   
		   echo "<span id=\"monspan".$counter."\" onclick=\"afficher_input".$counter."(this, '3".$counter."')\">".$donnees['total_journee']."</span></td>"; 	
		        
		   echo '<td><input type="submit" id="submit" name="submit_modif" value="Enregistrer" /></td>';	   
		echo "</tr>";  
		
	$data[] = $donnees['total_journee'];
    list($heures, $minutes, $secondes) = explode(':', $donnees['total_journee']);
    $total_5 += $heures * 3600 + $minutes * 60 + $secondes;
	
	
		$compteur++; // on incrémente le compteur  
		
 		
			if($compteur % $nbreElements == 0){   
				echo "</table>";       
      echo "<div class=\"totalsemaine\">Total de la semaine : ".floor($total_5 / 3600) . ":"  . ($total_5 /60) % 60 . ":" . $total_5 % 60 . "</div>";  
      $total_5 = 0; 
				echo '</div></div>
				<div class="compact"><div class="contenu"><div class="titre">Semaine</div>'; 
				echo "<table>"; 
				   echo "<tr>"; 
					   echo "<th>Date</th>"; 
					   echo "<th>Arrivée</th>"; 
					   echo "<th>pause</th>"; 
					   echo "<th>Départ</th>"; 	
					   echo "<th>Total journée</th>"; 
					   echo "<th>Options</th>"; 					   
				   echo "</tr>"; 
			}  
		 echo "</form>"; 
	}
	  
echo "</table>";     
echo "</div></div>";

Merci  d'avance pour votre aide

Vous êtes demandeur d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur web junior

Je postule
Formation
en ligne
Financée
à 100%
21 juin 2018 à 23:34:12

http://sql.sh/cours/where/between
Google répond à tout, PHP Manual sait (presque) tout, StackOverflow envisage tout !
22 juin 2018 à 11:53:43

Merci pour ta réponse, mais je ne pense pas que cela corresponde à ce que je cherche
22 juin 2018 à 12:20:17

sorry :(
Google répond à tout, PHP Manual sait (presque) tout, StackOverflow envisage tout !
22 juin 2018 à 12:34:29

Non c'est très gentil !

Je vais mettre un screen pour que ce soit plus clair

-
Edité par NoceboNocebo 22 juin 2018 à 12:36:14

22 juin 2018 à 13:08:28

Pour calculer le 'total journée' et 'total de la semaine', tu doit procéder en plusieurs étapes

  • Récupérer les lignes dans la table Travail qui se trouve dans la semaine que tu cible (faire une requête avec un between sur la colonne 'date')
  • Pour chaque ligne Faire la somme des deux intervalles de temps matin et aprem pour déterminer l’intervalle 'total journée'
  • Faire la somme de tout les 'total journée' pour déterminer le total semaine

Tu peux manipuler facilement les dates et les intervalles avec les classes datetime et dateInterval

24 juin 2018 à 11:06:17

Merci pour ta réponse, mais ce n'est pas du tout ma question ^^ (je l'ai déjà fait)

Je cherche à récupérer la premiere et la derniere date de chaque semaine de 5 jours.

24 juin 2018 à 11:16:15

Bonjour,

tu as tout ce qu'il faut dans la classe DateTime, le numéro de semaine, le jour de la semaine.

25 juin 2018 à 10:41:31

Bonjour,

Peux-tu m'aider en me guidant un peu, car mon code est déjà assez compliqué etant donné que j'ai déjà du mettre deux compteurs

Merci d'avance

25 juin 2018 à 11:30:22

Il te suffit de faire une boucle sur le numéro de semaine, tu peux alors récupérer les jours correspondants avec setISODate : http://php.net/manual/fr/datetime.setisodate.php

25 juin 2018 à 12:43:30

Salut !

Si, comme le dit mon VDD, tu utilises les numéros de semaine, tu devrais pouvoir utiliser la notation o-\WW-N (repris depuis les lettres de formatage pour la fonction date() de PHP) pour déterminer les dates de début et de fin. Par exemple, pour la semaine 26 de 2018, new \DateTime('2018-W26-1'); sera bien le 25 juin 2018 et new \DateTime('2018-W26-7'); le 1er juillet 2018.

-
Edité par Ymox 29 juin 2018 à 8:18:47

OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
25 juin 2018 à 12:56:10

Ymox a écrit:

Salut !

Si, comme le dit mon VDD, tu utilises les numéros de semaine, tu devrais pouvoir utiliser la notation Y-\WW-N (repris depuis les lettres de formatage pour la fonction date() de PHP) pour déterminer les dates de début et de fin. Par exemple, pour la semaine 26 de 2018, new \DateTime('2018-W26-1'); sera bien le 25 juin 2018 et new \DateTime('2018-W26-7'); le 1er juillet 2018.

-
Edité par Ymox il y a 7 minutes

Bien vu en effet, c'est plus simple.

29 juin 2018 à 7:56:58

Merci pour vos réponses,

Je ne comprends pas trop comment intégrer ça à mon code.

29 juin 2018 à 8:37:28

Pour commencer, que fournis-tu comme valeurs au script qui doit afficher ton tableau ? Je parle de paramètres que tu envoies en GET ou POST, pas les valeurs qui sont récupérées depuis la base de données. Pour récupérer celles-ci, tu dois avoir besoin d'autres valeurs, et c'est celles-ci que je souhaite que tu nous listes.

OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
1 juillet 2018 à 21:08:56

Voilà :
$date = $_POST['date'];
$entree_am = $_POST['entree_am'];
$sortie_am = $_POST['sortie_am'];
$entree_pm = $_POST['entree_pm'];
$sortie_pm = $_POST['sortie_pm']; 
	<form method="post" id="formulaire" name="formSaisie" action="index.php" enctype="multipart/form-data" onsubmit="return valider()"> 
		<label>Date </label><input class="formulaire" type="date" name="date"><br />
		<label>Entree AM </label><input class="formulaire" type="time" name="entree_am"><br />
		<label>Sortie AM </label><input class="formulaire" type="time" name="sortie_am"><br />
		<label>Entrée PM </label><input class="formulaire" type="time" name="entree_pm"><br />		
		<label>Départ PM</label><input class="formulaire" type="time" name="sortie_pm"><br />  
		<input type="submit" id="submit" name="submit" value="Enregistrer" /> 
	</form>

-
Edité par NoceboNocebo 1 juillet 2018 à 21:09:15

2 juillet 2018 à 8:51:05

Dans ce cas, tu peux te baser sur $_POST['date'].

$date = new \DateTime($_POST['date']);
$monday = new \DateTime($date->format('o-\WW-1'));
$sunday = new \DateTime($date->format('o-\WW-7'));

-
Edité par Ymox 3 juillet 2018 à 18:54:09

OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
2 juillet 2018 à 17:17:27

Ok mais comment faire en sorte de n'avoir que la premiere et la 5eme date à chaque fois

1/02/2018
2/02/2018
3/02/2018
4/02/2018
5/02/2018
8/02/2018
9/02/2018
10/02/2018
11/02/2018
12/02/2018
Du 1/02/2018 au 5/02/2018
Du 8/02/2018 zu 12/02/2018




2 juillet 2018 à 17:27:30

Heu… Mon antépénultième message fournit justement une manière de récupérer le lundi et le dimanche d'une semaine contenant une date donnée…

J'ai loupé quelque chose ?

Pour avoir d'autres jours de la semaine, il suffit de remplacer les 1 et 7 dans ce que j'ai fourni précédemment par un autre chiffre…

-
Edité par Ymox 2 juillet 2018 à 18:02:16

OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
3 juillet 2018 à 15:20:16

Merci pour ta réponse,

Cela ne fonctionnera pas puisque le POST n'est pas utilisé dans mon tableau

$sql = mysqli_query($bdd,"SELECT * FROM Travail ORDER BY date ");
$nbreElements = 5; // tous les 5 éléments 
$compteur = 0; // initialisation du compteur 
$counter = 0; 
echo "<div class=\"compact\"><div class=\"contenu\"><div class=\"titre\">Semaine du 00/00 au 00/00</div>";   
echo "<table>"; 
   echo "<tr>"; 
       echo "<th>Date</th>"; 
       echo "<th>Entree</th>"; 
       echo "<th>Sortie</th>"; 
       echo "<th>Entree</th>";	   
       echo "<th>Sortie</th>"; 	
       echo "<th>Total journée</th>"; 
       echo "<th>Options</th>"; 	   
   echo "</tr>"; 

   
   while ($donnees = mysqli_fetch_assoc($sql)) {
		$data[] = $donnees['total_journee'];
		setlocale(LC_TIME, 'french');
		setlocale(LC_TIME, 'fr_FR.utf8','fra');// OK
		$date = $donnees['Date'];  
		echo '<form method="post" id="semi" action="index.php?id='.$donnees['id'].'" enctype="multipart/form-data">';
	echo '<input type="hidden" name="id" value="'.$donnees['id'].'">';
		echo "<tr>";    
		   echo "<td class=\"date\">".strftime('%A %d %B %Y', strtotime($date))."</td>";  
		   echo "<td>";
		   $counter = $counter + 1; 

		   echo '<input class="cache" name="entree_am"  type="time"  value="'.$donnees['entree_am'].'" value="'.$donnees['entree_am'].'" "/>'; 
		   echo "<td>";		   
		   echo '<input class="cache" name="sortie_am"  type="time"  value="'.$donnees['sortie_am'].'" value="'.$donnees['sortie_am'].'" "/>'; 
		   echo "<td>";	
			echo '<input class="cache" name="entree_pm"  type="time"  value="'.$donnees['entree_pm'].'" value="'.$donnees['entree_pm'].'" "/>'; 
		   echo "<td>";		   
		   echo '<input class="cache" name="sortie_pm"  type="time"  value="'.$donnees['sortie_pm'].'" value="'.$donnees['sortie_pm'].'" "/>'; 
		   echo "<td>";	
		    
		   echo '<input type="text" id="moninput'.$counter.'" name="total_journee" onKeyUp="afficher_span'.$counter.'(event, this.value, 3'.$counter.');" value="'.$donnees['total_journee'].'" style="display:none;"/>';	   
		   echo "<span id=\"monspan".$counter."\" onclick=\"afficher_input".$counter."(this, '3".$counter."')\">".$donnees['total_journee']."</span></td>"; 	
		        
		   echo '<td><input type="submit" id="submit" name="submit_modif" value="Enregistrer" /></td>';	   
		echo "</tr>";  
		
	$data[] = $donnees['total_journee'];
    list($heures, $minutes, $secondes) = explode(':', $donnees['total_journee']);
    $total_5 += $heures * 3600 + $minutes * 60 + $secondes;
	 
		$compteur++; // on incrémente le compteur  
		 
			if($compteur % $nbreElements == 0){   
				echo "</table>";       
				echo "<div class=\"totalsemaine\">Total de la semaine : ".floor($total_5 / 3600) . ":"  . ($total_5 /60) % 60 . ":" . $total_5 % 60 . "</div>";   
				$total_5 = 0; 
				echo '</div></div>
				<div class="compact"><div class="contenu"><div class="titre">Semaine du 00/00 au 00/00</div>'; 
				echo "<table>"; 
				   echo "<tr>"; 
				   echo "<th>Date</th>"; 
				   echo "<th>Entree</th>"; 
				   echo "<th>Sortie</th>"; 
				   echo "<th>Entree</th>";	   
				   echo "<th>Sortie</th>"; 	
				   echo "<th>Total journée</th>"; 
				   echo "<th>Options</th>"; 					   
				   echo "</tr>"; 
			}  
		 echo "</form>"; 
	}
	  
echo "</table>";     
echo "</div></div>";



3 juillet 2018 à 16:41:20

Alors à quoi ça te sert d'envoyer une date qui ne sera pas utilisée ? A l'inverse, si la date est nécessaire, pourquoi tu ne la passes pas ?

Je t'ai demandé quelles variables tu passais au script qui affiche ton tableau, tu m'as bien mentionné $date = $_POST['date'], ce qui fait que tu as une date dans la semaine que tu souhaites afficher.
Donc non, je ne comprends pas où on ne se comprend pas.

-
Edité par Ymox 3 juillet 2018 à 18:55:52

OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
5 juillet 2018 à 16:45:57

Oui je pense que j'ai fait une petite erreur dans mon explication,  merci de ton aide et de ta patiente.

J'ai un formulaire avec POST, mais pour récupérer mes entrées et les afficher j'utilise : $donnees['Date']; 

Je mets la totale :

<?php include 'functions.php' ;
$ua = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/iphone/i',$ua) || preg_match('/android/i',$ua) || preg_match('/blackberry/i',$ua) || preg_match('/symb/i',$ua) || preg_match('/ipad/i',$ua) || preg_match('/ipod/i',$ua) || preg_match('/phone/i',$ua) )
{
header("Location: mobile.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head> 
<title>Accueil Administration</title>
<link rel="shortcut icon" href="" />
<meta name="description" content="" /> 
<?php  
include 'include-menu.php' ;
 
if($_POST['submit']) {  // SUBMIT NOUVEAU JEU  

	$date = $_POST['date'];
	$entree_am = $_POST['entree_am'];
	$sortie_am = $_POST['sortie_am'];
	
	$entree_pm = $_POST['entree_pm'];
	$sortie_pm = $_POST['sortie_pm']; 
	
	$h1=strtotime($_POST['entree_am']);
	$h2=strtotime($_POST['sortie_am']);
	$h3=strtotime($_POST['entree_pm']);
	$h4=strtotime($_POST['sortie_pm']);	
	$total_journee_am = date('H:i',$h2-$h1);
	$total_journee_pm = date('H:i',$h4-$h3);  
		$h5=strtotime($total_journee_am);
		$h6=strtotime($total_journee_pm); 
		$total_journee = date('H:i',$h6+$h5);	 
	
	
	$date1 = explode("-", $date); 
	 $requete= "INSERT INTO Travail VALUES ('','$date', '$entree_am', '$sortie_am','$entree_pm','$sortie_pm','$total_journee')"; 
    mysqli_query($bdd, $requete) or die('Erreur SQL !'.$requete.'<br>'.mysqli_error($bdd));
	 
	// if (mysqli_query($bdd, "INSERT INTO ".$date1[1]."
						   // VALUES (".$date.", ".$entree_am.", ".$sortie_am.",".$sortie_pm.")"
					// )
		// ) { 
		// header('Location: ' . $_SERVER['HTTP_REFERER']); 
		// exit;
	// } else {
		// echo "<br />nop";  
	// }  
}  
// FIN SUBMIT NOUVEAU JEU
?>
<div id="infos">Bienvenue dans l'administration</div>
 
	<form method="post" id="formulaire" name="formSaisie" action="index.php" enctype="multipart/form-data" onsubmit="return valider()"> 
		<label>Date </label><input class="formulaire" type="date" name="date"><br />
		<label>Entree AM </label><input class="formulaire" type="time" name="entree_am"><br />
		<label>Sortie AM </label><input class="formulaire" type="time" name="sortie_am"><br />
		<label>Entrée PM </label><input class="formulaire" type="time" name="entree_pm"><br />		
		<label>Départ PM</label><input class="formulaire" type="time" name="sortie_pm"><br />  
		<input type="submit" id="submit" name="submit" value="Enregistrer" /> 
	</form>
  
 
<div class="contenu"> 
					<?php
if($_POST['submit_modif']) {  
	$id = $_GET["id"] ; 
	$Date = $_POST['Date']; 
	$entree_am = $_POST['entree_am'];
	$sortie_am = $_POST['sortie_am'];
	
	$entree_pm = $_POST['entree_pm'];
	$sortie_pm = $_POST['sortie_pm']; 
	
	$h1=strtotime($_POST['entree_am']);
	$h2=strtotime($_POST['sortie_am']);
	$h3=strtotime($_POST['entree_pm']);
	$h4=strtotime($_POST['sortie_pm']);	
	$total_journee_am = date('H:i',$h2-$h1);
	$total_journee_pm = date('H:i',$h4-$h3);  
		$h5=strtotime($total_journee_am);
		$h6=strtotime($total_journee_pm); 
		$total_journee = date('H:i',$h6+$h5);	 
	
	if (mysqli_query($bdd, "UPDATE Travail SET entree_am = '$entree_am', sortie_am = '$sortie_am', entree_pm = '$entree_pm',sortie_pm = '$sortie_pm', total_journee = '$total_journee' WHERE id = '$id'")) {
		 // header('Location: ' . $_SERVER['HTTP_REFERER']);
		 // exit;
	} else {
		 echo "Error updating record: " . mysqli_error($bdd);
	}
}
 		
$sql = mysqli_query($bdd,"SELECT * FROM Travail ORDER BY date ");
$nbreElements = 5; // tous les 5 éléments 
$compteur = 0; // initialisation du compteur 
$counter = 0; 
echo "<div class=\"compact\"><div class=\"contenu\"><div class=\"titre\">Semaine du 00/00 au 00/00</div>";   
echo "<table>"; 
   echo "<tr>"; 
       echo "<th>Date</th>"; 
       echo "<th>Entree</th>"; 
       echo "<th>Sortie</th>"; 
       echo "<th>Entree</th>";	   
       echo "<th>Sortie</th>"; 	
       echo "<th>Total journée</th>"; 
       echo "<th>Options</th>"; 	   
   echo "</tr>"; 

   
   while ($donnees = mysqli_fetch_assoc($sql)) {
		$data[] = $donnees['total_journee'];
		setlocale(LC_TIME, 'french');
		setlocale(LC_TIME, 'fr_FR.utf8','fra');// OK
		$date = $donnees['Date'];  
		echo '<form method="post" id="semi" action="index.php?id='.$donnees['id'].'" enctype="multipart/form-data">';
	echo '<input type="hidden" name="id" value="'.$donnees['id'].'">';
		echo "<tr>";    
		   echo "<td class=\"date\">".strftime('%A %d %B %Y', strtotime($date))."</td>";  
		   echo "<td>";
		   $counter = $counter + 1; 

		   echo '<input class="cache" name="entree_am"  type="time"  value="'.$donnees['entree_am'].'" value="'.$donnees['entree_am'].'" "/>'; 
		   echo "<td>";		   
		   echo '<input class="cache" name="sortie_am"  type="time"  value="'.$donnees['sortie_am'].'" value="'.$donnees['sortie_am'].'" "/>'; 
		   echo "<td>";	
			echo '<input class="cache" name="entree_pm"  type="time"  value="'.$donnees['entree_pm'].'" value="'.$donnees['entree_pm'].'" "/>'; 
		   echo "<td>";		   
		   echo '<input class="cache" name="sortie_pm"  type="time"  value="'.$donnees['sortie_pm'].'" value="'.$donnees['sortie_pm'].'" "/>'; 
		   echo "<td>";	
		    
		   echo '<input type="text" id="moninput'.$counter.'" name="total_journee" onKeyUp="afficher_span'.$counter.'(event, this.value, 3'.$counter.');" value="'.$donnees['total_journee'].'" style="display:none;"/>';	   
		   echo "<span id=\"monspan".$counter."\" onclick=\"afficher_input".$counter."(this, '3".$counter."')\">".$donnees['total_journee']."</span></td>"; 	
		        
		   echo '<td><input type="submit" id="submit" name="submit_modif" value="Enregistrer" /></td>';	   
		echo "</tr>";  
		
	$data[] = $donnees['total_journee'];
    list($heures, $minutes, $secondes) = explode(':', $donnees['total_journee']);
    $total_5 += $heures * 3600 + $minutes * 60 + $secondes;
	 
		$compteur++; // on incrémente le compteur  
		 
			if($compteur % $nbreElements == 0){   
				echo "</table>";       
				echo "<div class=\"totalsemaine\">Total de la semaine : ".floor($total_5 / 3600) . ":"  . ($total_5 /60) % 60 . ":" . $total_5 % 60 . "</div>";   
				$total_5 = 0; 
				echo '</div></div>
				<div class="compact"><div class="contenu"><div class="titre">Semaine du 00/00 au 00/00</div>'; 
				echo "<table>"; 
				   echo "<tr>"; 
				   echo "<th>Date</th>"; 
				   echo "<th>Entree</th>"; 
				   echo "<th>Sortie</th>"; 
				   echo "<th>Entree</th>";	   
				   echo "<th>Sortie</th>"; 	
				   echo "<th>Total journée</th>"; 
				   echo "<th>Options</th>"; 					   
				   echo "</tr>"; 
			}  
		 echo "</form>"; 
	}
	  
echo "</table>";     
echo "</div></div>";	 
	?>	 
</body>
</html>



Voilà ça va etre plus clair :)

-
Edité par NoceboNocebo 5 juillet 2018 à 16:47:12

5 juillet 2018 à 17:24:41

Tu fais déjà un break (un niveau tableau quand ton jour courant passe au lundi, il te suffit de prendre la semaine de ce jour et de trouver le vendredi correspondant comme cela a été montré plus haut, ou encore d'ajouter 4 jours.

Récupérer date entre 5 jours

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown