Contrôle une date située ou pas entre 2 dates
Résolu
bruno3591
Messages postés
159
Statut
Membre
-
Alain_42 Messages postés 5413 Statut Membre -
Alain_42 Messages postés 5413 Statut Membre -
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
- Jm date avis - Forum Consommation & Internet
- Jm date désabonnement ✓ - Forum Consommation & Internet
- Airpods 3 date de sortie - Guide
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>