2010-12-31 7 views
0

Ich arbeite an einer Funktion, die eine Anzahl von Tagen zu einem Datum innerhalb einer inkrementierenden Variablenschleife hinzufügt. Ich habe ein Problem mit dem Datum der vorherigen Schleife, um die nächsten 30 Tage zu diesem Datum hinzuzufügen. Dies scheint für die ersten 2 Schleifen zu funktionieren, dann bricht es ab und ich kann den richtigen Code nicht herausfinden, um die vorherigen Daten zu erhalten.Hinzufügen der Anzahl der Tage zu einem vorherigen Datum innerhalb der inkrementieren Variable für Schleife

Hier ist mein 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); 

Dies ist, was

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

Dank für das Schauen

Antwort

0

Vielleicht verstehen Ich bin nicht Ihre Anforderung vollständig: aber die nächsten 5 X 30 Tage Perioden zu erhalten:

$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); 

Gibt:

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

Ja, Sie haben Recht Ich habe $ Due-1 statt nur $ verwendet. Danke für Ihre Hilfe. –

0

diese: strtotime ($due-1) wahrscheinlich Sie beißt. $due ist ein String, der "2010-12-31" enthält, und das Subtrahieren von 1 führt zu 2010-1 = 2009.

Werfen Sie einen Blick auf mktime(). Z.B.

$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

Dank Sie richtig waren, dass Diese Linie war das Problem. Ich habe $ due-1 in $ directed geändert und es funktioniert jetzt korrekt –

+0

@Paul: Trotzdem würde ich 'mktime()' für diese Art von Problem dringend empfehlen. – 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); 
Verwandte Themen