Contrôle une date située ou pas entre 2 dates

Résolu/Fermé
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010 - 24 déc. 2008 à 14:27
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 24 déc. 2008 à 15:31
Bonjour,

Je cherche à contrôler si la date que je saisi se trouve bien entre 2 dates. J'ai trouvé une fonction que je tente d'adapter mais je bloque bêtement sur une instruction conditionnelle if et else.

Le but est d'afficher un echo si la date se trouve entre les 2 dates, sinon afficher un echo pour dire quelle ne si trouve pas. C'est tout simple mais je n'y arrive pas.
Merci de votre aide.
Voici l'intégralité du code :

<!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>

</head>
<body>


<form method="post" action="" name="formulaire">
<table cellpadding="0" cellspacing="10" BORDER="0">
<tr>
<th>test date :</th>
<td><input type="text" name="test_date" value=""></td>
<th>Date début :</th>
<td><input type="text" name="debut" value=""></td>
<th>Date fin :</th>
<td><input type="text" name="fin" value=""></td>
</tr>
<td align="left"><input type="submit" name="enregistrer" value=" Enregistrer " ></td>
<td><input type="reset" name="annuler" value="Annuler"></td>
</tr>
</table>
</form>

<?php

/**
* function getDatesBetween
* renvoie un tableau contenant toutes les dates, jour par jour,
* comprises entre les deux dates passées en paramètre.
* NB : les dates doivent être au format aaaa-mm-dd (mais on peut changer le parsing)
* @param (string) $dStart : date de départ
* @param (string) $dEnd : date de fin
* @return (array) aDates : tableau des dates si succès
* @return (bool) false : si échec
*/
function getDatesBetween ($dStart, $dEnd, $test_date) {
$iStart = strtotime ($dStart);
$iEnd = strtotime ($dEnd);
if (false === $iStart || false === $iEnd) {
return false;
}
$aStart = explode ('-', $dStart);
$aEnd = explode ('-', $dEnd);
if (count ($aStart) !== 3 || count ($aEnd) !== 3) {
return false;
}
if (false === checkdate ($aStart[1], $aStart[2], $aStart[0]) || false === checkdate ($aEnd[1], $aEnd[2], $aEnd[0]) || $iEnd <= $iStart) {
return false;
}
for ($i = $iStart; $i < $iEnd + 86400; $i = strtotime ('+1 day', $i) ) {
$sDateToArr = strftime ('%Y-%m-%d', $i);
$sYear = substr ($sDateToArr, 0, 4);
$sMonth = substr ($sDateToArr, 5, 2);
$aDates[$sYear][$sMonth][] = $sDateToArr;
/////////////////////////////////
//affiche si date dedans
if ($test_date==$sDateToArr)
{
echo "LA DATE EST DEDANS";
}
else
{
echo "LA DATE N'EST PAS DEDANS";
}
}
}

// les dates
if (isset($_POST['enregistrer']))
{
$test_date = $_POST['test_date'];
$debut=$_POST['debut'];
$fin=$_POST['fin'];
//affichages des resultats
$aDates = getDatesBetween ($debut,$fin, $test_date);
}
?>

</body>
</html>

2 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 déc. 2008 à 15:09
Salut,

Essayes comme ça:

<!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>

</head>
<body>


<form method="post" action="" name="formulaire">
<table cellpadding="0" cellspacing="10" BORDER="0">
( dates au format jj-mm-aaaa )
<tr>
<th>test date :</th>
<td><input type="text" name="test_date" value=""></td>
<th>Date début :</th>
<td><input type="text" name="debut" value=""></td>
<th>Date fin :</th>
<td><input type="text" name="fin" value=""></td>
</tr>
<tr>
<td align="left"><input type="submit" name="enregistrer" value=" Enregistrer " ></td>
<td><input type="reset" name="annuler" value="Annuler"></td>
</tr>
</table>
</form>

<?php
function getDatesBetween ($dStart, $dEnd, $test_date) {
	//on explode les dates sous forme d'array
	$array_Start=explode("-",$dStart);//jour, mois , annee
	$array_End=explode("-",$dEnd);
	$array_dateTest=explode("-",$test_date);
	//on cree le timestamp de chaque date  (strtotime  ne marche qu'avec le format anglais)
	$iStart = mktime('00','00','00',$array_Start[1],$array_Start[0],$array_Start[2]);
	$iEnd = mktime('00','00','00',$array_End[1],$array_End[0],$array_End[2]);
	$iTest = mktime('00','00','00',$array_dateTest[1],$array_dateTest[0],$array_dateTest[2]);

	if (false === $iStart || false === $iEnd) {
		$resultat="format dates non valides";
	}else{
		//comparaison des timesatmp
		if($iTest > $iStart AND $iTest < $iEnd ){
			$resultat= "LA DATE EST DEDANS";
		}else{
		$resultat="LA DATE N'EST PAS DEDANS";
		}
	}
	return $resultat;
}
//fin fontion

// les dates
if (isset($_POST['enregistrer'])){
	$test_date = $_POST['test_date'];
	$debut=$_POST['debut'];
	$fin=$_POST['fin'];
	
//appel fonction
$aDates = getDatesBetween ($debut,$fin, $test_date);
//ET affichage des resultats il ne faut pas oublier de faire echo car comme tu avais fait c'est l'echo qui était dans la fonction qui affichait le résultat

echo $aDates;
}
?>

</body>
</html>
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010 16
24 déc. 2008 à 15:29
Merci Alain pour ton cadeau de noẽl en avance :) Tout fonctionne bien.

La cerise sur le gâteau c'est le format fr en plus. Quand on est bon on est bon !

Joyeux noẽl et à bientôt.

Bruno
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 déc. 2008 à 15:31
Aie ! j'ai les chevilles qui enflent

Merci et bonnes fêtes à toi aussi

@lain
0