Un planning sans week-end

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Un planning sans week-end

Re: Un planning sans week-end

par lacfab » 31 janv. 2011, 01:43

Le week-end a porté conseil !
J'ai fini par trouver la solution. Plutôt que de passer en url des dates formatées date() j'ai passé un time() et du coup ça fonctionne à merveille.

Pour ceux que ça intéresse voici mon code :
<?
session_start();

if (isset($_GET['session']) AND $_GET['session'] == "erase"){
	unset ($_SESSION['jourNum']);
	unset ($_SESSION['dateJour']);
}
?>
<html>
<head>
  <title>Planning</title>
  <script type="css">
  .table
{
border:1px solid #c3c3c3;
border-collapse:collapse;
}

</script>
</head>
<body bgcolor="#CCCCCC">

<?php
// Si dateJour n'existe pas, lui donner une valeur
if (!isset ($_SESSION['dateJour'])){    
	$_SESSION['dateJour'] = time();
}
// Si jourNum n'existe pas, lui donner une valeur
if (!isset ($_SESSION['jourNum'])){    
	$_SESSION['jourNum'] = date('w',time());
}
// Si jour passe dans l'entete http, on change la date
if (isset ($_GET['jour'])){
	$jour = $_GET['jour'];
	$_SESSION['dateJour'] = mktime(0, 0, 0, date("m", $jour), date("d", $jour), date("Y", $jour));
	$_SESSION['jourNum'] = date('w',$_SESSION['dateJour']);
}


// nombre de secondes
$un = "86400";
$deux = "172800";
$trois = "259200";
	
	// Samedi
	if ($_SESSION['jourNum'] == "6"){
		echo 'on est samedi<br>';
		$_SESSION['jourNum'] = "1"; // aujourd'hui devient lundi
		$_SESSION['dateJour'] = $_SESSION['dateJour'] + $deux;	
		$hierNum = "5"; // hier devient vendredi
		$dateHier = $_SESSION['dateJour'] - $trois;
		$demainNum  = "2";	// demain devient mardi		
		$dateDemain = $_SESSION['dateJour'] + $un;
	}
	// Dimanche
	elseif ($_SESSION['jourNum'] == "0"){
		echo 'on est dimanche<br>';
		$_SESSION['jourNum'] = "1"; //aujourd'hui devient lundi
		$_SESSION['dateJour'] = $_SESSION['dateJour'] + $un;
		$hierNum = "5";  // hier devient dimanche
		$dateHier = $_SESSION['dateJour'] - $deux;
		$demainNum  = "2";		//demain devient mardi		
		$dateDemain = $_SESSION['dateJour'] + $un;
	}
	// Lundi
	elseif ($_SESSION['jourNum'] == "1"){
		echo 'on est lundi<br>';
		$hierNum = "5";  //hier devient vendredi
		$dateHier = $_SESSION['dateJour'] - $trois;
		$demainNum  = "2";  //demain devient mardi
		$dateDemain = $_SESSION['dateJour'] + $un;
	}
	// Vendredi
	elseif ($_SESSION['jourNum'] == "5"){
		echo 'on est vendredi<br>';
		$hierNum = "4";  // hier devient jeudi
		$dateHier = $_SESSION['dateJour'] - $un;
		$demainNum  = "1";  // demain devient lundi
		$dateDemain = $_SESSION['dateJour'] + $trois;
	}
	else {
		echo 'on est en semaine<br>';
		$hierNum = $_SESSION['jourNum'] - 1;
		$dateHier = $_SESSION['dateJour'] - $un;
		$demainNum  = $_SESSION['jourNum'] + 1;
		$dateDemain = $_SESSION['dateJour'] + $un;
	}
	$jourMoins = $dateHier;	
	$jourPlus = $dateDemain;
	
echo '<a href="tableau.php?jour='.$jourMoins.'">Jour pr&eacute;c&eacute;dent</a> - <a href="tableau.php?jour='.$jourPlus.'">Jour suivant</a> - <a href="tableau.php?session=erase">Aller &agrave; aujourd\'hui</a>'; 


echo '<table border=1 cellpadding=0 cellspacing=0 class="table">
<tbody>
  <tr>
    <td>&nbsp;</td>
    <td width=1 nowrap bgcolor="#222222"></td>
    <td colspan=40 align=center nowrap>'.date('Y-m-d', $dateHier).' - jour '.$hierNum.'</td>
    <td width=1 nowrap bgcolor="#222222"></td>
    <td colspan=40 align=center nowrap>'.date('Y-m-d', $_SESSION['dateJour']).' - jour '.$_SESSION['jourNum'].'</td>
    <td width=1 nowrap bgcolor="#222222"></td>
    <td colspan=40 align=center nowrap>'.date('Y-m-d', $dateDemain).' - jour '.$demainNum.'</td>
    <td width=1 nowrap bgcolor="#222222"></td>
  </tr>';

 ?> 
</tbody>
</table>
</body>
</html>

Re: Un planning sans week-end

par lacfab » 29 janv. 2011, 02:36

J'ai avancé sur la chose.

J'arrive à afficher le jour en cours et le jour précédent et suivant.
Si nous sommes mercredi : mardi - mercredi - jeudi
Si nous sommes samedi : vendredi - lundi - mardi

Jusque là no problemo. Maintenant je pousse le bouchon, je me dis que les utilisateurs voudront peut-être naviguer de quelques jours en avant ou en arrière, je fais donc un bouton "moins" et un bouton "plus" qui est géré via des dates (du coup possibilité de faire un menu déroulant avec les dates du mois courant par exemple)

C'est là que je bloque, voici mon bout de code que vous pourrez tester pour vous rendre compte du soucis. Les dates passent bien dans l'entête http mais ne sont pas interprétées
<?
session_start();

if (isset($_GET['session']) AND $_GET['session'] == "erase"){
	unset ($_SESSION['jourNum']);
	unset ($_SESSION['dateJour']);
}
?>
<html>
<head>
  <title>Planning</title>
  <script type="css">
  .table
{
border:1px solid #c3c3c3;
border-collapse:collapse;
}

</script>
</head>
<body bgcolor="#CCCCCC">

<?php
// Si dateJour n'existe pas, lui donner une valeur
if (!isset ($_SESSION['dateJour'])){    
	$_SESSION['dateJour'] = time();
}
// Si jourNum n'existe pas, lui donner une valeur
if (!isset ($_SESSION['jourNum'])){    
	$_SESSION['jourNum'] = date('w',time());
}
// Si jour passe dans l'entete http, on change la date
if (isset ($_GET['jour'])){
	$jour = str_replace("-", ",", $_GET['jour']);
	$_SESSION['dateJour'] = mktime(0, 0, 0, $jour);
	$_SESSION['jourNum'] = date('w',$_SESSION['dateJour']);
}
echo time().'<br>';
echo $_SESSION['dateJour'].'<br>';
echo date('Y-m-d', $_SESSION['dateJour']).'<br>';

// nombre de secondes
$un = "86400";
$deux = "172800";
$trois = "259200";
	
	// Samedi
	if ($_SESSION['jourNum'] == "6"){
		echo 'on est samedi<br>';
		$_SESSION['jourNum'] = "1"; // aujourd'hui devient lundi
		$_SESSION['dateJour'] = $_SESSION['dateJour'] + $deux;	
		$hierNum = "5"; // hier devient vendredi
		$dateHier = $_SESSION['dateJour'] - $trois;
		$demainNum  = "2";	// demain devient mardi		
		$dateDemain = $_SESSION['dateJour'] + $un;
	}
	// Dimanche
	elseif ($_SESSION['jourNum'] == "0"){
		echo 'on est dimanche<br>';
		$_SESSION['jourNum'] = "1"; //aujourd'hui devient lundi
		$_SESSION['dateJour'] = $_SESSION['dateJour'] + $un;
		$hierNum = "5";  // hier devient dimanche
		$dateHier = $_SESSION['dateJour'] - $deux;
		$demainNum  = "2";		//demain devient mardi		
		$dateDemain = $_SESSION['dateJour'] + $un;
	}
	// Lundi
	elseif ($_SESSION['jourNum'] == "1"){
		echo 'on est lundi<br>';
		$hierNum = "5";  //hier devient vendredi
		$dateHier = $_SESSION['dateJour'] - $trois;
		$demainNum  = "2";  //demain devient mardi
		$dateDemain = $_SESSION['dateJour'] + $un;
	}
	// Vendredi
	elseif ($_SESSION['jourNum'] == "5"){
		echo 'on est vendredi<br>';
		$hierNum = "4";  // hier devient jeudi
		$dateHier = $_SESSION['dateJour'] - $un;
		$demainNum  = "1";  // demain devient lundi
		$dateDemain = $_SESSION['dateJour'] + $trois;
	}
	else {
		echo 'on est en semaine<br>';
		$hierNum = $_SESSION['jourNum'] - 1;
		$dateHier = $_SESSION['dateJour'] - $un;
		$demainNum  = $_SESSION['jourNum'] + 1;
		$dateDemain = $_SESSION['dateJour'] + $un;
	}
	$jourMoins = date("m-d-Y", $dateHier);	
	$jourPlus = date("m-d-Y", $dateDemain);
	
echo '<a href="tableau.php?jour='.$jourMoins.'">Jour pr&eacute;c&eacute;dent</a> - <a href="tableau.php?jour='.$jourPlus.'">Jour suivant</a> - <a href="tableau.php?session=erase">Aller &agrave; aujourd\'hui</a>'; 


echo '<table border=1 cellpadding=0 cellspacing=0 class="table">
<tbody>
  <tr>
    <td>&nbsp;</td>
    <td width=1 nowrap bgcolor="#222222"></td>
    <td colspan=40 align=center nowrap>'.date('Y-m-d', $dateHier).' - jour '.$hierNum.'</td>
    <td width=1 nowrap bgcolor="#222222"></td>
    <td colspan=40 align=center nowrap>'.date('Y-m-d', $_SESSION['dateJour']).' - jour '.$_SESSION['jourNum'].'</td>
    <td width=1 nowrap bgcolor="#222222"></td>
    <td colspan=40 align=center nowrap>'.date('Y-m-d', $dateDemain).' - jour '.$demainNum.'</td>
    <td width=1 nowrap bgcolor="#222222"></td>
  </tr>';
 
 ?> 
</tbody>
</table>
</body>
</html>
je butte sur la solution .... une idée ?

Re: Un planning sans week-end

par lacfab » 27 janv. 2011, 15:30

Rien justement.
L'affichage passera du vendredi au lundi suivant.

Re: Un planning sans week-end

par Mazarini » 27 janv. 2011, 15:00

Bonjour,

Attention au date('w') et au date('N') qui respectivement font 0 à 6 et 1 à 7.

Que fait tu lorsque $aujourd'hui est un samedi ou un dimanche ?

Re: Un planning sans week-end

par lacfab » 27 janv. 2011, 10:35

Merci à vous.

Je te confirme Mazarini que les +1 ou -1 posent des problèmes avec le changement d'heures, j'ai eu le soucis une fois sur un agenda d'un autre type !

J'étudie vos réponses et je reviens à vous si j'ai des interrogations :)

Re: Un planning sans week-end

par Mazarini » 27 janv. 2011, 10:31

Bonjour,
$aujoudhui = date();
$hier = $aujourdhui - 1;
while (date('N',$hier)> 5) $hier = $hier - 1;
$demain = $aujourdhui + 1;
while (date('N',$demain )> 5) $demain = $demain + 1;
Voir éventuellement datetime::add et datetime::sub si le brutal -1 ou +1 ne marche pas

Attention, il arrivait que l'ajout/soustraction de jours pose des problèmes lors du passage à l'heure d'hivers ou d'été. Le plus sur est de forcer l'heure à midi dans $aujourdhui.

Edit : vu le post précédent de Jojo qui à vu le post précédent :
1) je suis le plus lent
2) j'utilise moins de ligne

Re: Un planning sans week-end

par jojolapine » 27 janv. 2011, 10:18

Bonjour,

tu peux utiliser ceci : date('w', $ton_timestamp)
ça te retourne le jour de la semaine ( en commençant à 0 )

du coup ça donnerait :

$today = time();

$dayofweek = date('w',$today);

// Lundi
if($dayofweek == 0){

    $yesterday = $dayofweek + strtotime('-3 day');
    $tomorrow =  $dayofweek + strtotime('+1 day');
}
// vendredi
elseif($dayofweek == 4){

    $yesterday = $dayofweek + strtotime('-1 day');
    $tomorrow =  $dayofweek + strtotime('+3 day');
}
else {

    $yesterday = $dayofweek + strtotime('-1 day');
    $tomorrow =  $dayofweek + strtotime('+1 day');
}
EDIT : vu le post de Berzemus disons que j'ai fournit le contenu des méthode de l'objet (en gros) ;)

Re: Un planning sans week-end

par Berzemus » 27 janv. 2011, 10:15

Je prends la piste de l'objet, dans lequel tu mettras tout le code compliqué, de sorte à avoir quelque chose comme ceci;
$timestamp =  // disons un lundi;
$jourOuvrable = new jourOuvrable($timeStamp);

echo $jourOuvrable->actuel(); // renvoie 'lundi'
echo $jourOuvrable->precedent(); // renvoie 'vendredi'
echo $jourOuvrable->prochain(); // renvoie 'mardi
Ainsi, la complexité sera bien cachée et l'interface facilement utilisable.

Je préfère l'objet à la classe statique dans ce cas car il est plus flexible, tu pourras y ajouter d'autres méthodes par la suite (jour actuel en timestamp, en français, en date, ...)

Un planning sans week-end

par lacfab » 27 janv. 2011, 01:03

Bonjour,

Je voudrais pouvoir faire un planning qui me présente trois jours :
- hier
- aujourd'hui
- demain
MAIS ce planning doit sauter le samedi et le dimanche.

Donc si nous sommes vendredi, j'aurai comme affichage :
jeudi - vendredi - lundi

En sachant que j'utiliserai des timestamps. Comment puis-je m'y prendre ??
Merci d'avance pour votre aide.