Der Martin: Datumabfrage in If-Schleife

Beitrag lesen

Hallo,

ich möchte folgendes programmieren:

dan tu das doch. ;-)

if($ablauf->format('d.m.Y') < $heute->format('d.m.Y'))

Ganz schlechter Ansatz. Mit format() wandelst du deine Datumswerte in Strings um, du vergleichst also letztendlich Strings. Ein Stringvergleich geht aber von links nach rechts zeichenweise durch, bis ein Unterschied festgestellt wird.
Solange die Wertigkeit der Stellen/Bestandteile von links nach rechts abnimmt, geht das noch (ist aber auch nicht schön); du setzt aber den Tag, also den niederwertigsten Anteil ganz nach links. Deine Abfrage wird also beispielsweise feststellen, dass der 04.01.2013 "kleiner", also früher ist als der 30.06.2008, einfach weil der Vergleich schon bei der ersten Stelle entschieden ist: '0' ist kleiner als '3'.
Hättest du bei der String-Umwandlung das ISO-Format verwendet (also erst das Jahr, dann den Monat, dann den Tag), dann würde es sogar mit der String-Variante funktionieren, wie du erwartest. Schön ist es dennoch nicht.

Darum: Rechen- oder Vergleichsoperationen nie mit Strings machen, wenn es besser geht.

Und es geht tatsächlich besser. Zum einen könntest du mit diff() die Differenz der beiden Datumswerte bilden und dann prüfen, ob das Feld invert des Ergebnisses gesetzt ist oder nicht. Das erscheint mir aber auch schon unnötig kompliziert.
Besser finde ich, beide Datumswerte in einen Timestamp zu wandeln - das ist einfach ein Zahlenwert, den man dann direkt vergleichen kann:

if ($ablauf->getTimestamp() < $heute->getTimestamp())

Mit diesem Lauf funktioniert es => er kommt in die Bereits abgelaufen Schleife.

Wer ist "er"?
Btw, der von dir gezeigte Code-Ausschnitt enthält keine Schleife. Und eine if-Schleife gibt es auch nicht.

Ciao,
 Martin

--
Eine Nonne kommt in den Himmel. An der Pforte fragt Petrus: "Wer bist du?" - "Ich bin die Braut Jesu." Petrus stutzt einen Moment, ruft dann nach hinten: "He Freunde, habt ihr schon gehört? Der Juniorchef will heiraten!"
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(