Ottmar: PHP festes Datum plus 6 Monate

Ich brauche das Datum für mehrere Berechnungen deshalb setze ich es in eine Variable

$datum		= date("Y-m-d H:i:s", time());
$laufzeit = Wert zwischen 1 und 12;

ich schaffe es nicht den Wert '+6 month ' gegen meine Variable +$laufzeit in meiner Berechung zu tauschen.

$datum-ablauf= date_format(date_modify(date_create($datum), '+6 month '), 'Y-m-d H:i:s');

Ottmar

Edit Rolf B: ~~~ Codeklammern eingefügt

  1. Hallo Ottmar,

    $datum-ablauf

    Bin mir zwar nicht 100% sicher ob eine PHP-Variable Bindestriche enthalten darf, ich würde auf jeden Fall nie welche nutzen wollen.

    Gruss
    Henry

  2. Tach!

    Ich brauche das Datum für mehrere Berechnungen deshalb setze ich es in eine Variable

    $datum = date("Y-m-d H:i:s", time()); $laufzeit = Wert zwischen 1 und 12;

    ich schaffe es nicht den Wert '+6 month ' gegen meine Variable +$laufzeit in meiner Berechung zu tauschen.

    Siehe Variable parsing und String Operators.

    $datum-ablauf= date_format(date_modify(date_create($datum), '+6 month '), 'Y-m-d H:i:s');

    Das ist ungültige Syntax. Das - ist ein Operator und wird als solcher erkannt, nicht als Variablennamensbestandteil. Nimm einen Unterstrich.

    dedlfix.

  3. Hallo Ottmar,

    wie Du die Laufzeit mit den Monaten verheiratest, hat Dedlfix ja schon angedeutet. Achte beim variable parsing darauf, doppelte Anführungszeichen zu verwenden; mit einfachen geht's nicht. Übrigens ist das '+' in date_modify($datum, '+6 month') optional, das kann Dir das Leben erleichern.

    Noch zwei Hinweise von mir:

    Zum einen ist es einfacher, den aktuellen Timestamp über ein parameterloses date_create() zu holen, oder mit new DateTime(). Zuerst eine String-Repräsentation zu erzeugen und die dann wieder in ein DateTime-Objekt umzuwandeln ist unnötig umständlich.

    Zum zweiten muss man mit date_modify aufpassen, weil diese Methode bösartig ist: sie verändert das übergebene DateTime-Objekt. Folgender Code macht nicht, was man naiv glauben könnte:

    $jetzt = date_create();
    $spaeter = date_modify($jetzt, '+6 month');
    

    Nachdem diese Befehle durchlaufen wurden, sind $jetzt und $spaeter beide 6 Monate in der Zukunft. Man kann sich hier mit dem clone-Operator helfen, der Objekte dupliziert und damit verhindert, dass das in $jetzt angesprochende DateTime-Objekt verändert wird.

    $jetzt = date_create();
    $spaeter = date_modify(clone $jetzt, '+6 month');
    

    Rolf

    --
    sumpsi - posui - clusi
    1. Tach!

      Zum zweiten muss man mit date_modify aufpassen, weil diese Methode bösartig ist: sie verändert das übergebene DateTime-Objekt. Folgender Code macht nicht, was man naiv glauben könnte:

      Man könnte auch gleich die herkömmlichen Funktionen nehmen, wenn man die DateTime-Geschichte auch nur mit Funktionen statt objektorientiert verwendet. Dann würde man solche Probleme auch nicht haben. Also konkret strtotime() für die Berechnung und date() für die Ausgabe.

      dedlfix.