2016-07-29 16 views
0

Ich habe ein bestimmtes Datum - für dieses Beispiel sagen 6. Juli. Es fällt in Woche 27 im Jahr 2016. Mit PHP 5.5.9 Ich versuche, die 7 Daten, die in dieser Woche auftreten, mit der folgenden Funktion zurückgeben:In PHP, wie verwende ich einen Inkrement-Operator in Kombination mit einer Variablen, ohne eine Inkrement-Operation durchzuführen?

function getStartAndEndDate($week, $year) { 
    $i=0; 
    $dto = new DateTime(); 
    $ret[$i] = $dto->setISODate($year, $week)->format('Y-m-d'); 
    $i++; 
    while ($i < 7){ 
     $ret[$i] = $dto->modify('+' . $i . ' days')->format('Y-m-d'); 
     $i++; 
    } 
    return $ret; 
} 

ich erwarte eine Liste von sieben aufeinanderfolgende Tage, von 2016.07.04 bis 2016-07-10

Stattdessen habe ich folgende Termine empfange: 2016.07.04, 2016- 07-05, 2016-07-07, 2016-07-10 2016-07-14 2016-07-19, 2016-07-25

Ich glaube das folgende l Ine ist die Quelle meines Problems:

$ret[$i] = $dto->modify('+' . $i . ' days')->format('Y-m-d'); 

Wenn ich statische Werte angeben, funktioniert der Code.

Alle Vorschläge oder Einblicke würden geschätzt.

Danke

+0

Danke Tejaswi und Trincot. Ihre Erklärungen waren beide hilfreich –

Antwort

0

In der Zeile darunter, statt mit $ verwende ich nur 1.

Ihre Linie

ist
$ret[$i] = $dto->modify('+' . $i . ' days')->format('Y-m-d'); 

Verwenden

$ret[$i] = $dto->modify('+1 days')->format('Y-m-d'); 

Der Grund dafür ist, dass wenn Sie die Modifikationsfunktion verwenden, das Datumsobjekt selbst geändert wird. Wenn also das Datum 2016-07-04 war, wird mit modify ("+ $ i days") [$ i = 1] 2016-07-05, aber im nächsten Schritt, wenn Sie modifizieren ("+ $ ich Tage ") [$ i = 2] es wird von 2016-07-05 zählen und Ihnen 2016-07-07 geben und das wird weitergehen.

3

Die modify Methode $dto wirklich ändert, so dass in der nächsten Iteration Sie nicht mit dem gleichen $dto Wert wie in der vorherigen Iteration handelt. So

, eigentlich macht dies Ihre Aufgabe einfacher, da Sie nur 1 Tag jedes Mal hinzufügen:

$ret[$i] = $dto->modify('+1 days')->format('Y-m-d');