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 -
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>
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:
- Contrôle une date située ou pas entre 2 dates
- Nombre de jours entre deux dates excel - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Airpods 3 date de sortie - Guide
- Trier par date excel - Guide
- Jm date avis - Forum Consommation & Internet
2 réponses
Salut,
Essayes comme ça:
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>