Ankündigung

Einklappen
Keine Ankündigung bisher.

Zukünftiges Datum berechnen

Einklappen

Unconfigured Ad Widget

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zukünftiges Datum berechnen

    Hi,

    ich habe einen kleinen script geschrieben, der das Datum in 8 Monaten abzüglich einem Tag anzeigen soll. Dabei liefert der script bis zu einem Tagesdatum von "28" korrekte Ausgaben:

    01.09.2019 -> 30.04.2020
    01.07.2019 -> 29.02.2020
    15.08.2019 -> 14.04.2020
    15.02.2019 -> 14.10.2019
    28.02.2019 -> 27.10.2019
    28.06.2019 -> 27.02.2019


    Aber ab einem Tagesdatum von "29" fangen die Probleme an:
    29.02.2019 -> 31.10.2019 (richtig wäre 30.10.2019)
    30.09.2019 -> 29.05.2020 (richtig wäre 30.05.2019)
    30.06.2019 -> 29.02.2019 (richtig wäre 28.02.2019)


    Ändert man den Wert von 8 Monate auf 7 Monate:
    31.07.2019 -> 01.03.2020 (richtig wäre 29.02.2020)


    Weiß jemand, wie man das Problem beheben könnte, oder gibt es evtl. einen fertigen script? Hoffe ihr könnt mir weiterhelfen. Hier der sript:


    PHP-Code:
    <?php
    $datum
    ="31.09.2019";
    $dat1=explode (".",$datum);
    $date date_create($dat1[2]."-".$dat1[1]."-".$dat1[0]);
    date_add($datedate_interval_create_from_date_string("8 months"));
    $dat2=date_format($date'Y-m-d');
    $dat3 date_create(date($dat2));
    $dat4 date_sub($dat3date_interval_create_from_date_string("1 days"));
    $dat5 date_format($dat4"d.m.Y");
    echo 
    $dat5;
    ?


    Vielen Dank im voraus


  • #2
    Zitat von de_Joerg Beitrag anzeigen
    Aber ab einem Tagesdatum von "29" fangen die Probleme an:
    29.02.2019 -> 31.10.2019 (richtig wäre 30.10.2019)
    Der 29.02.2019 existiert schon mal nicht. DateTime ist so tolerant und korrigiert das auf den 1. März.
    PHP-Code:
    $date date_create('29.02.2019');
    var_dump($date); echo "<br>\n";

    date_add($datedate_interval_create_from_date_string("8 months"));
    var_dump($date); echo "<br>\n";

    date_sub($datedate_interval_create_from_date_string("8 months"));
    var_dump($date); echo "<br>\n"

    Code:
    Outputs
    object(DateTime)#1 (3) { ["date"]=> string(26) "2019-03-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }
    object(DateTime)#1 (3) { ["date"]=> string(26) "2019-11-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }
    object(DateTime)#1 (3) { ["date"]=> string(26) "2019-03-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }
    Das Verhalten einiger Methoden von DateTime ist von der PHP-Version abhängig. Das oben wurde mit PHP V7.2.21 probiert.

    Zitat von de_Joerg Beitrag anzeigen
    Weiß jemand, wie man das Problem beheben könnte, oder gibt es evtl. einen fertigen script? Hoffe ihr könnt mir weiterhelfen. Hier der sript:
    Als ersten Schritt empfehle ich den Input zu validieren. DateTime::getLastErrors liefert dir dafür die nötigen Informationen.




    PHP-Klassen auf github

    Kommentar


    • #3
      Jau, Du hast Recht.Der Februar im Jahr 2020 hat 29 Tage.

      Leider zeigt mir "DateTime::getLastErrors" niemals einen Fehler an. Egal welches Datum ich eingeben (PHP 5.4.45). Gibt es evtl. eine Alternative?

      Kommentar


      • #4
        https://www.php.net/manual/de/function.checkdate.php

        Kommentar


        • #5
          Zitat von de_Joerg Beitrag anzeigen

          Leider zeigt mir "DateTime::getLastErrors" niemals einen Fehler an. Egal welches Datum ich eingeben (PHP 5.4.45).
          Dann machst du etwas falsch. Ich nutze das schon mehrere Jahre über mehrere PHP Versionen hinweg.

          PHP-Klassen auf github

          Kommentar

          Lädt...
          X