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

Résolu
bruno3591 Messages postés 155 Date d'inscription   Statut Membre Dernière intervention   -  
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -
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>
A voir également:

2 réponses

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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   Statut Membre Dernière intervention   16
 
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   Statut Membre Dernière intervention   894
 
Aie ! j'ai les chevilles qui enflent

Merci et bonnes fêtes à toi aussi

@lain
0