2010-12-31 2 views
0

Je travaille sur une fonction qui ajoute un nombre de jours à une date dans une boucle de variable incrémentante. J'ai un problème pour obtenir la date de la boucle précédente pour ajouter les 30 prochains jours à cette date. Cela semble fonctionner pour les 2 premières boucles puis les pauses et je n'arrive pas à trouver le code correct pour obtenir les dates précédentes.Ajout du nombre de jours à une date précédente dans la variable incrémentée pour la boucle

Voici mon code:

$pay_cycles=5; 
$period=30; 

$arr = array(); 
for ($i=1;$i<=$pay_cycles;$i++) { 

//if first loop get todays date 
if($i==1){ 
$due = date("Y-m-d"); 

//else add to previous date 
} else { 
$time = strtotime ('+'.$period.' day' , strtotime ($due-1)) ; 
$due = date("Y-m-d", $time); 
} 
    $arr[] = $due; 
} 
print_r($arr); 

C'est ce qui imprime

Array ([0] => 2010-12-30 [1] => 2011-01-29 [2] => 2011-01-29 [3] => 2011-01-29 [4] => 2011-01-29) 

Merci pour la recherche

Répondre

0

Peut-être que je ne comprends pas votre exigence tout à fait: mais pour obtenir les 5 prochaines X 30 périodes de jour:

$pay_cycles=5; 
$period=30; 

$arr = array(); 
for ($i=1;$i<=$pay_cycles;$i++) { 

//if first loop get todays date 
if($i==1){ 
$due = date("Y-m-d"); 

//else add to previous date 
} else { 
$time = strtotime ("$due +$period day") ; 
$due = date("Y-m-d", $time); 
} 
    $arr[] = $due; 
} 
print_r($arr); 

donne:

Array 
(
    [0] => 2010-12-31 
    [1] => 2011-01-30 
    [2] => 2011-03-01 
    [3] => 2011-03-31 
    [4] => 2011-04-30 
) 
+0

Oui, vous avez raison, j'utilisais $ dû-1 au lieu de $ dû. Merci de votre aide. –

0

ceci: strtotime ($due-1) est probablement vous mordre. $due est une chaîne contenant "2010-12-31" et la soustraction 1 entraîne 2010-1 = 2009.

Jetez un oeil à mktime(). Par exemple.

$d = date("d"); 
$m = date("m"); 
$y = date("Y"); 

$pay_cycles = 5; 
$period = 30; 

for ($i=0;$i<$pay_cycles;$i++) 
{ 
    $ts = mktime(0,0,0,$m,$d+$i*$period,$y); 
    $datestr = date("Y-m-d",$ts); 
    // stuff with $datestr 
} 
+0

Merci vous EXACTITUDE que cette ligne était le problème. J'ai changé $ dû-1 à $ dû et il fonctionne maintenant correctement –

+0

@Paul: Pourtant, je recommande fortement d'utiliser 'mktime()' pour ce type de problème. – mvds

0
$pay_cycles=5; 
$period=30; 

$arr = array(); 
for ($i=0;$i<$pay_cycles;$i++) { 
if($i==0){ 
$due = date("Y-m-d"); 

//else add to previous date 
} else { 

$time = mktime(0,0,0,date("m"),date("d")+30*$i,date("Y")); 
$due = date("Y-m-d", $time); 
} 
    $arr[] = $due; 
} 
print_r($arr); 
Questions connexes