Page 1 sur 1

Lister les dates entre 2 dates

Posté : 27 janv. 2010, 14:22
par dorian
Bonjour à tous

Je suis fasse à un problème qui n'en n'est surement pas un mais je n'arrive pas à trouver ce que je veux faire ...

Je m'explique :

Je veut savoir toutes les dates entre deux dates.

Pour cela j'ai trouvé un magnifique script sur internet :

Code : Tout sélectionner

<?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) { $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; } if (isset ($aDates) && !empty ($aDates)) { return $aDates; } else { return false; } } $aDates = getDatesBetween ('2006-09-01', '2006-10-31'); //echo '<pre>', print_r ($aDates), '</pre>'; ?>
Le "problème" est que l'affichage est sous forme de tableau :

Code : Tout sélectionner

2006 : 09 : 0 = 2006-09-01 1 = 2006-09-02 2 = 2006-09-03 3 = 2006-09-04 4 = 2006-09-05 5 = 2006-09-06 6 = 2006-09-07 7 = 2006-09-08 8 = 2006-09-09 9 = 2006-09-10 10 = 2006-09-11 11 = 2006-09-12 12 = 2006-09-13 13 = 2006-09-14 14 = 2006-09-15 15 = 2006-09-16 16 = 2006-09-17 17 = 2006-09-18 18 = 2006-09-19 19 = 2006-09-20 20 = 2006-09-21 21 = 2006-09-22 22 = 2006-09-23 23 = 2006-09-24 24 = 2006-09-25 25 = 2006-09-26 26 = 2006-09-27 27 = 2006-09-28 28 = 2006-09-29 29 = 2006-09-30 10 : 0 = 2006-10-01 1 = 2006-10-02 2 = 2006-10-03 3 = 2006-10-04 4 = 2006-10-05 etc...
Et J'aimerai avoir par exemlpe juste un tableau avec que les dates (valeur) sans les clé (2006, 09 et 10)
pa rexemple $dates[0] sera la première date, $date[1], la 2eme etc ...


J'espère avior été clair et que qualqu'un aurra la gentilesse de m'aider :)

Merci d'avance à vous !

Re: Lister les dates entre 2 dates

Posté : 27 janv. 2010, 14:40
par stealth35
function getDatesBetween($start, $end)
{
    if($start > $end)
    {
        return false;
    }    
    
    $sdate    = strtotime("$start +1 day");
    $edate    = strtotime($end);
    
    $dates = array();
    
    for($i = $sdate; $i < $edate; $i += strtotime('+1 day', 0))
    {
        $dates[] = date('Y-m-d', $i);
    }
    
    return $dates;
}

$dates = getDatesBetween('2009-01-01', '2009-01-15');    
print_r($dates);

Re: Lister les dates entre 2 dates

Posté : 19 nov. 2012, 10:45
par polo73
bonjour,

je répond un peu tard !
mais comment faire avec ton code pour que à l'affichage il n'affiche que la date sous la forme yyyy-mm-dd mais sans le mot array()
par exemple : 2011/11/05
2011/11/06
2011/11/07
2011/11/08

MERCI D'AVANCE

Re: Lister les dates entre 2 dates

Posté : 19 nov. 2012, 10:55
par piotrowski-s
j'ai créé cette fonction:
<?php
function getDatesFromRange($startDate, $endDate) {
    $return = array($startDate);
    $start = $startDate;
    $i = 1;
    if (strtotime($startDate) < strtotime($endDate)) {
        while (strtotime($start) < strtotime($endDate)) {
            $start = date('Y-m-d', strtotime($startDate . '+' . $i . ' days'));
            $return[] = $start;
            $i++;
        }
    }

    return $return;
}
?>
puis pour l'utiliser

$dates=getDatesFromRange($date1, $date2]);

avec $date1 la date du début au format Y-M-D
et date 2 la date de fin au même format.

ensuite pour l'affichage tu peux faire un tableau ou autre:
<?php
echo "<table id='box-table-a' ><tr><th scope='col' wifth='20%'>&Eacute;tat</th><th scope='col' width='80%'>Mes Absences </th></tr>"; 
foreach ($dates as $key => $val) 
{ 
if(new Datetime(date('Y-m-d',strtotime($val)))<new DateTime())
{
echo "<tr><td><img src='images/checkered_flag.png'></td><td>". date('d-m-Y',strtotime($val))."</td></tr>"; 
}
else
{
	echo "<tr><td><img src='images/Clock4.png'></td><td>". date('d-m-Y',strtotime($val))."</td></tr>"; 

};
} 
echo "</table>"; 
 }
?>

Re: Lister les dates entre 2 dates

Posté : 19 nov. 2012, 10:56
par Saian
C'est un tableau, il te suffit de faire un foreach par exemple :
foreach($dates as $date)
  echo $date.'<br/>';// affiche chaque date avec un retour à la ligne

// OU

echo implode('<br/>', $dates)// affiche chaque date avec un retour à la ligne

// tu peux remplacer <br/> par ce que tu veux. Une , un - etc

Re: Lister les dates entre 2 dates

Posté : 19 nov. 2012, 11:05
par polo73
je vous remerci pour cette réponse rapide .
cela m'a beaucoup aidé .
mais si je veux récuperer les valeurs dans un formulaire une par une .

j'ai fait cela :
<?php for($i = 0; $i < 6; $i ++)
{ 
print_r ($aDates[$i]);?><input type="text" name="" /><br>
<?php } ?>
mais à la place du nombre 6 , j'aimerais récuperer le nombre de mois entre par exemple 2012/06 et 2013/01 .

encore merci.

Re: Lister les dates entre 2 dates

Posté : 19 nov. 2012, 11:13
par polo73
merci beaucoup , j'ai fais avec un foreach c'est beaucoup plus simple .

Re: Lister les dates entre 2 dates

Posté : 19 nov. 2012, 11:15
par Saian
Tu peux remplacer 6 par count($arDates) mais un foreach($arDates as $date) fera le job avec une écriture plus légère.

Re: Lister les dates entre 2 dates

Posté : 19 nov. 2012, 16:13
par polo73
re-bonjour

maintenant après avoir récuperer cette variable :
<?php foreach($aDates as $date)
{ ?>
<label><?php echo $date;?> </label><input type="text" name="nb" /><br>
<?php } ?>
j'aimerais mettre toutes les valeurs dans une base mais avec le même libellé comment puis-je faire ?

merci d'avance.

Re: Lister les dates entre 2 dates

Posté : 19 nov. 2012, 21:17
par Saian
En ajoutant des crochés au name de l'input tu peux transformer le paramètre en tableau :
<?php foreach($aDates as $date): ?>
<label><?php echo $date;?> </label><input type="text" name="nb[]" value="<?php echo $date;?>" /><br>
<?php endforeach; ?>

Re: Lister les dates entre 2 dates

Posté : 20 nov. 2012, 09:48
par polo73
j'ai donc essayé de mettre tes crochets pour faire un tableau
<?php foreach($aDates as $date)
{ ?>
                <input type="hidden" id="nom" name="nom" value="<?php echo $nom; ?>" size="5" />
	<input type="text" id="date" name="date" value="<?php echo $date; ?>" size="5" readonly="readonly" style="border: none;"  />
	<input type="text" name="nb[]" size="5" /><br>
<?php } ?>
mais je n'arrive pas à recuperer cette valeur dans un autre fichier et les mettre dans une base.
$nom=$_POST['nom'];
        $nb=$_POST['nb[]'];
        $aDates = $_POST['date'];
		
foreach ($nb as $date)
{
mysql_query (" INSERT INTO nb VALUES('$nom','$nb','$date') ") or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
}	
merci d'avance.

Re: Lister les dates entre 2 dates

Posté : 20 nov. 2012, 10:13
par Saian
Les crochets ne font pas parti du nom de la variable. Ils disent que c'est un tableau.
$nb = $_POST['nb'];//$nb est un tableau
PS : pour vérifier le contenu d'un tableau (comme $_POST) tu peux faire un print_r, ce qui te permet de vérifier que les différents paramètres sont bien dedans et sous quel nom :
echo '<pre>';
print_r($_POST);
echo '</pre>';

Re: Lister les dates entre 2 dates

Posté : 20 nov. 2012, 10:44
par polo73
merci pour ton aide.

mais si je veux inserer 2 valeurs d'un tableau .
<input type="text" id="date" name="date[]" value="<?php echo $date; ?>" size="5" readonly="readonly" style="border: none;"  />
	<input type="text" name="nb[]" size="5" /><br>
et j'ai essayé en fesant cela :
	foreach ($nb as $nombre)
	{		
	                //On affiche le resultat
		echo "Nous venons d\'enregistrer le nombre de jours : $nombre" ;
			
		foreach ($date as $dates)
		{
			echo " à la date de : $dates";	
			echo ' à '.$_POST['nom'].'<br />';
			mysql_query (" INSERT INTO nb VALUES('$nom','$nombre','$dates') ") or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());					
		}
	}
mais il me l'insére 2 fois la meme valeurs .
merci encore

Re: Lister les dates entre 2 dates

Posté : 20 nov. 2012, 11:35
par Saian
Ton formulaire semble incomplet la ?

Si tu as du date[] et du nb[] et que date correspond à nb :
for($i = 0; $i < count($_POST['nb']); $i++) {
  $nombre = $_POST['nb'][$i];
  $date = $_POST['date'][$i];
}

Re: Lister les dates entre 2 dates

Posté : 20 nov. 2012, 12:33
par polo73
parfait ! merci beaucoup ! j'y avais pas penser a ça !