2011-07-29 3 views
1

Comment puis-je limiter cette date ou imprimer cette date de star_date à end_date? ex.Comment faire une limite de date en PHP?

$start_date="2011-05-15";//june 15 2011 

$end_date="2011-07-30";//july -7,2011 

The result should be. 

$dates[]="2011-05-15"; 
$dates[]="2011-05-16"; 
$dates[]="2011-05-17"; 
$dates[]="2011-05-18"; 
$dates[]="...."; 
$dates[]="...."; 
$dates[]="...."; 
$dates[]="...."; 
until it reaches. 
$dates[]="2011-07-30"; 
+1

copie possible de [PHP: boucle à travers tous les mois dans la plage de dates?] (http://stackoverflow.com/questions/2155110/php-loop-thru-all-months-in-date-range) – Gordon

Répondre

1

Cela fonctionne:

$start_date = "2011-05-15"; 
$end_date = "2011-07-07"; 

$dates = array(); 
$stop = strtotime($end_date); 
for($i = strtotime($start_date); $i <= $stop; $i += 86400) 
    $dates[] = date('Y-m-d', $i); 

PS. J'ai changé votre date de juillet à 07-07 pour correspondre à votre commentaire.

+0

exactement ce que je cherchais. Je vous remercie. – kedomonzter

+1

@mocca 86400 est le nombre de secondes en une journée. La valeur dans '$ i' est en secondes, donc je l'incrémente de 86400 pour arriver au jour suivant. – Paulpro

2

Cela pourrait le faire ...

$start_date = strtotime('2011-05-15'); //june 15 2011 
$end_date = strtotime('2011-07-30'); //july -7,2011 
$dates = array(); 
for ($i=$start_date; $i<=$end_date; $i+=86400) { 
    $dates[] = date('Y-m-d',$i); 
} 
2
$start_date="2011-05-15"; 
$end_date="2011-07-30"; 
$date=$start_date; 
while (strtotime($new_date) != strtotime($end_date)) 
{ 
    echo $new_date=date("Y-m-d",strtotime("+1 day", strtotime($date)))."<br>"; 
    $dates[]=$new_date; 
    $date=$new_date;  
} 
3

Je suggère de prendre la date de début comme un objet et continuer à ajouter 1 jour (http://www.php.net/manual/en/datetime.add.php) dans une boucle jusqu'à la date de fin.

<?php 
$start_date = new DateTime('2011-05-15'); 
$end_date = new DateTime('2011-07-30'); 
while($end_date > $start_date) 
{ 
    echo $start_date->format('Y-m-d') . "\n"; 
    $start_date->add(new DateInterval('P1D')); 
} 
?> 

Le code ci-dessus n'a pas été testé.

0
$start_date = strtotime('2011-05-15'); 
$end_date = strtotime('2011-07-30'); 
$dates = array(); 
for ($i = $start_date; $i<=$end_date; $i+= (strtotime('+1 day') - strtotime('now'))) { 
    $dates[] = date('Y-m-d',$i); 
} 
2

Et un autre ....

date_default_timezone_set('America/Los_Angeles'); 

$startDate='2011-05-15'; 
$endDate='2011-07-30'; 

$t1=strtotime($startDate); 
$days=(strtotime($endDate)-$t1)/86400; 

for($i=0;$i<=$days;$i++) $dates[]=date('Y-m-d',$t1+($i*86400)); 

print_r($dates); 

Et pour le 'pas très efficace mais fera dans la plupart des cas oneliner':

for($t=strtotime($startDate);$t<=strtotime($endDate);$t+=86400) $dates[]=date('Y-m-d',$t); 

Et un pour ceux qui savent, le dernier pour ce matin exercices:

$dates=array_map(create_function('$t','return date("Y-m-d",$t);'),range(strtotime($startDate),strtotime($endDate),86400)); 
+1

ouais, mais en définissant Los Angeles comme l'épicentre ajoute automatiquement une heure avec le trafic ... (grincement) – neokio

+0

@neokio désolé à ce sujet, je ne pouvais pas comprendre votre fuseau horaire et LA était l'un des premiers dans la liste ... – zaf