Eli: Datum vergleichen und Ausgabe steuern

Hallo

ich möchte gerene ein Datum vergleichen.

<div>
Orginal: <?php echo $p_von; ?>
 - Tage: <?php echo $s_eil; ?>

<?php
 $array=explode(".",$p_von);
 $tag=$array[0];
 $monat=$array[1];
 $jahr=$array[2];

 $test = $jahr."-".$monat."-".$tag;

 $date = new DateTime($test);
 $date->modify('-2 day');
 
 echo "= " . $date->format('Y-m-d');
?>

Heute:<?php echo date("Y-m-d");?>
</div>

Meine Aufgabe ist wenn HEUTE = echo "= " . $date->format('Y-m-d'); wenn JA dann eine Ausgabe. Wie kann ich also das Datum vergleichen.

  1. Hallo,

    Meine Aufgabe ist wenn

    "Wenn" heißt auf english "if" und das ist eine sogenannte Kontrollstruktur.

    Gruß
    Kalk

  2. Meine Aufgabe ist wenn HEUTE = echo "= " . $date->format('Y-m-d'); wenn JA dann eine Ausgabe. Wie kann ich also das Datum vergleichen.

    Da genügt eine Prüfung ob Tag && Monat && Jahr gleich sind. MfG

  3. Ich kann ja gar nicht glauben, dass die Frage auf den if Befehl zielte...

    Hinweis vorweg: Um einen String in ein Datum zu konvertieren, muss man ihn nicht manuell ins Y-m-d Format umstellen. Unterschiedliche Formate verstehen kann die DateTime Klasse mit einer statischen Factory-Methode selbst.

    $d_von = DateTime::createFromFormat('d.m.Y', $p_von);
    if ($d_von === FALSE)
    {
       // Fehlerbehandlung für ungültiges Datum
    }
    

    Eine Methode, um den Date-Anteil eines DateTime auf Objekt-Ebene zu isolieren, gibt es nicht - oder ich kenne sie nicht :). Es gibt nur date_parse, um einen String in Elemente wie Tag, Monag und Jahr zu zerlegen. Dann kannst Du die Datumsteile einzeln vergleichen. Das ist aber sehr umständlich. Einfacher und sicherlich auch schneller ist es, wenn Du beide Datümer mit dem gleichen Format in Strings umwandelst und diese Strings vergleichst.

    Wenn Du - irgendwoher - sicher sein kannst, dass $p_von bereits im d.m.Y format ist (d.h. exakt 10 Stellen, 2 Stellen Tag, Punkt, 2 Stellen Monat, Punkt, 4 Stellen Jahr), dann kannst Du Dir für den Vergleich das Parsen von $p_von auch schenken. Statt dessen erzeugst Du Dir ein DateTime Objekt für den aktuellen Tag, addierst 2 Tage drauf, formatierst das mit d.m.Y als String und vergleichst den direkt mit $p_von. Aber wie gesagt - das setzt voraus dass auf anderem Wege das korrekte Format von $p_von sichergestellt ist.

    Rolf

    1. Moin Rolf,

      if ist in PHP kein Befehl (und auch keine Schleife), sondern eine Kontrollstruktur – siehe auch die Antwort von Tabellenkalk.

      Viele Grüße
      Robert

      1. Sind Kontrollstrukturen nicht eine Teilmenge der Befehle (=Anweisungen, Statements), die eine Programmiersprache versteht?

        Aber prinzipiell hast Du irgendwo schon recht, der Begriff "Befehl" gehört eher zur Assemblersprache; bei höheren Programmiersprachen spricht man von Anweisungen oder Statements. Und du wirst mir nicht sagen wollen, dass der Terminus "if Anweisung" oder "if Statement" falsch sei.

        Rolf

    2. Hi,

      grundsätzlich würde ich für Operationen mit dem Datum (z.B. Vergleiche, Differenzen, Gültigkeiten) nicht dessen Stringrepresentation verwenden. Jede Angabe eines Datum ist auch ein numerischer Wert (Scaliger), d.h., man kann damit, über Vergleiche hinausgehend rechnen. So beschränkt sich auch die Prüfung ob ein Datum gültig ist, auf eine einfache Rechnung über den numerischen Wert gegenüber umfangreichen Stringvergleichen mit ungezählten Fallstricken.

      Des Weiteren ermöglichen Operationen über den numerischen Wert auch das Overload wie z.B. die Inkrementierung $dateobject++ oder $datediff = $dateobject1 - $dateobject2 was letztendlich auch einen CODE sehr übersichtlich macht. Und selbstverständlich ist auch toString eine Methode aus der Welt des Overload, ein print $dateobject präsentiert das Datum als String und hier gäbe es die Möglichkeit länderspezifisch zu operieren.

      OOP ist also doch ein bischen mehr als die Lehre von Äpfeln und Birnen 😉

      1. Tach!

        grundsätzlich würde ich für Operationen mit dem Datum (z.B. Vergleiche, Differenzen, Gültigkeiten) nicht dessen Stringrepresentation verwenden.

        Für einen einfachen Vergleich ist das ausreichend. Jedenfalls wenn es sich lediglich um das eine Vorkommen handelt.

        Jede Angabe eines Datum ist auch ein numerischer Wert (Scaliger), d.h., man kann damit, über Vergleiche hinausgehend rechnen. So beschränkt sich auch die Prüfung ob ein Datum gültig ist, auf eine einfache Rechnung über den numerischen Wert gegenüber umfangreichen Stringvergleichen mit ungezählten Fallstricken.

        Wenn man PHP hat, kann man in diese Richtung gehen, braucht das aber nicht. PHP hat bereits eine umfangreiche DateTime-Library an Bord, die auch in der Lage ist, Differenzen zwischen zwei Zeiten zu ermitteln.

        dedlfix.

        1. PHP hat bereits eine umfangreiche DateTime-Library an Bord,

          Was heißt an Bord, wird die bei jedem PHP Prozess geladen auch dann wenn sie gar nicht gebraucht wird?

          MfG

          1. Tach!

            PHP hat bereits eine umfangreiche DateTime-Library an Bord,

            Was heißt an Bord, wird die bei jedem PHP Prozess geladen auch dann wenn sie gar nicht gebraucht wird?

            DateTime gehört wie viele andere zu den einkompilierten Extensions. PHP betreibt man ja als Apachemodul oder als FCGI und nicht als herkömmliches CGI, das bei jedem Request erst gestartet werden muss. PHP inklusive händisch anzugebender Extensions wird komplett mit dem Start des FGCI beziehungsweise Moduls geladen. Dynamisches Nachladen wurde abgeschafft, hat eh keiner verwendet.

            dedlfix.