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

Résolu
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>
Configuration: Linux
Firefox 8.10

2 réponses

  1. 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
    1. 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
      1. Aie ! j'ai les chevilles qui enflent

        Merci et bonnes fêtes à toi aussi

        @lain
        0