Schleifenprogrammierung

Liebe/-r Experte/-in,

ich habe folgendes Problem, das ich nicht zu lösen verstehe!

Ich habe eine Variable mit einem Startdatum im Timestamp Format, und eine Variable mit einem Enddatum, ebenfalls im Timestamp Format.

Subtrahiere ich das Enddatum von Startdatum, und teile es durch 86400 (Die Sekundenanzahl eines Tages), erhalte ich die genaue Anzahl der Tage zwischen Start- und Enddatum.

Nun möchte ich eine for Schleife einsetzen, die mir im Timestamp Format alle Tage ausgibt, die zwischen Start- und Enddatum liegen.

Ich schaffe es leider nur, das die Schleife mir die Anzahl der Tage ausgibt, da $count immer nur um eins erhöht werden kann.

Folgendes Konstrukt bereitet mir seit Stunden arge Probleme:

// Startdatum
$startdatum=„1341007200“;

// 38 Tage später
$enddatum=„1344290400“;

// Die Differenz entspricht genau 38 Tage vom Startdatum zum Enddatum
$differenz=($enddatum-$startdatum)/86400;

// Die Schleife soll alle 38 Tage ausgeben,
// wobei jeder Tag ab Startdatum um 86400 Sekunden erhöht werden soll
// Und hier komme ich nicht weiter!
for ($count = 0; $count ";
}

Gibt es eine Möglichkeit, meine Idee umzusetzten?

Vielen Dank für Ihre Hilfe.

Mit freundlichen Grüßen
Andre Stickel

Hallo,

ich habe nicht genau verstanden, was genau du ausgeben willst. Aber vielleicht hilft dir weiter, dass Schleifen mit Variablen arbeiten. Alle drei Teile des Kopfes sind variabel! Ein Beispiel:

// Startdatum
$startdatum=„1341007200“;

// 38 Tage später
$enddatum=„1344290400“;

// Die Differenz entspricht genau 38 Tage vom Startdatum zum
// Enddatum - wird nicht mehr genutzt…
$differenz=($enddatum-$startdatum)/86400;

// Die Schleife soll alle 38 Tage ausgeben,
// wobei jeder Tag ab Startdatum um 86400 Sekunden erhöht
// werden soll
// setze $count einfach auf das Startdatum und addiere in
// jedem Durchlauf einen Tag bis $count größer oder gleich
// $enddatum ist.
for ($count = $startdatum; $count ";
}

Der Code ist ungetestet… Aber die Idee dürfte klar werden?

Ich hoffe, damit helfen zu können.

MfG

PERFEKT!
DANKE! DANKE! DANKE!

Ich brauchte einen Datums-Durchlauf zum Vergleich mit einer anderen mysql Tabelle, welcher mir genau die 38 Tage anzeigt die zwischen dem Start und Enddatum liegen!

Ich habe mir die 38 Datumsanzeigen mit $datum=(„d.m.Y“, $count); wieder umwandeln lassen, und es werden jetzt alle 38 Tage im Format dd.mm.YYYY angezeigt.

Was mir gefehlt hat war die folgende Anweisung:
$count +=86400;

Ich habe den Fehler gemacht, zu denken das es geht mit:
$count+86400;

Das hat natürlich eine Endlosschleife produziert!

Vielen Dank noch einmal an dieser Stelle!!!

Sehr gern geschehen! Schön, daß ich helfen konnte. :wink:

Es passiert ab und an mal, daß man so ein kleines „=“ oder ähnliches übersieht und dann anfängt zu suchen. :wink:

Vielen Dank auch für das Feedback!

Hallo Andre,
Du kannst $count um jeden beliebigen Wert hoch setzen, also auch für die Sekundenanzahl eines Tages.
Das sieht dann eben so aus „$count +86400“
Oder die Langform: „$count = $count+86400“

Oder Du formatierst den Tag mit date(„d.m.Y“,$count) und fragst in jeder Schleife, ob der Tag anders ist als der in der vorherigen Schleifendurchlauf. Nur dann gibst Du ihn aus. Das ist dann eben nur jedes 86400. Mal der Fall. Das kostet aber mehr Performance als wenn Du gleich nur jedes 86400. Mal in die Schleife kommst.

Gruß, Regina

Hallo Regina!

Vielen Dank für Deine Unterstützung! Ich habe tatsächlich ein = in der for Schleife vergessen.

Das Konstrukt sieht jetzt folgendermaßen aus, und funktioniert hervorragend:

for ($count = $startdatum; $count

Hey super!
Freut mich.

Hallo Andre,

Ich liebe ja das DateTime Objekt, damit kann man sehr einfach Datum Operationen tätigen ohne sich um so Nebensächlichkeiten wie Schaltjahr und co kümmern.

Sehr unterschätztes Objekt. :wink:

Hier mal mein Versuch dein Problem zu lösen:

// Startdatum
$startdatum=date_create("@1341007200");

// 38 Tage später
$enddatum=date_create("@1344290400");

// Die Differenz entspricht genau 38 Tage vom Startdatum zum Enddatum
// $differenz=($enddatum-$startdatum)/86400;
$verlauf = $startdatum;
// var_dump($startdatum, $verlauf); die();
// Die Schleife soll alle 38 Tage ausgeben,
// wobei jeder Tag ab Startdatum um 86400 Sekunden erhöht werden soll
// Und hier komme ich nicht weiter!
$count = 0;
while($verlauf->format(‚U‘) format(‚U‘))
{
$count++;
echo "Datum: " . $verlauf->format(‚d.m.Y‘);
echo " - Count: $count
";
$verlauf->modify(’+1 day’);
}

##############

zu beachten: beim date_create über timestamps ein @ vor die Zahl setzen. Ansonsten kannst dem ja mit allen möglichen Formaten füttern.

Viele Grüße
Frank