Gerd: Datum umwandeln und berechnen

Hi,
ich habe ein Formular, in dem Mitarbeiter ihre Urlaubszeiten eintragen können. Sie müssen jeweils den ersten Tag ihres Urlaubs eintragen und es  soll jetzt das Datum für 14 Tage später errechnet werden.

Das Datum liegt in der Form 01.01.2004 vor.
Wie kann ich mittels PHP das Zukunftsdatum berechnen lassen?

Vilen Dank im Voraus.

  1. Hallo,

    Das Datum liegt in der Form 01.01.2004 vor.

    Nicht gerade aussagekraeftiges Beispiel...
    dd.mm.yyyy ("deutsch"/"europaeisch")
    oder
    mm.dd.yyyy ("amerikanisch")?
    Wie auch immer, zum Berechnen ist es normalerweise am besten,
    wenn man Daten ins Unix-Timestamp-Format umwandelt.

    Wie kann ich mittels PHP das Zukunftsdatum berechnen lassen?

    Lies mal im PHP-Manual: Datums- und Zeit-Funktionen:
    http://www.php.net/manual/de/ref.datetime.php

    Insbesondere strtotime() ist interessant und koennte Dir weiterhelfen:
    $timestamp2=strtotime("+2 weeks",$timestamp1);

    Gruesse,

    Thomas

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
  2. Hi,

    zerlege das Datum in Tag, Monat und Jahr.

    Zähle bei Tag 14 dazu.

    Wenn es bei den Monaten 1,3,5,7,8,10,12 mehr als 31, bei 4,6,9,11 mehr als 30 oder bei 2 mehr als 28 sind, zähle bei Monat eins dazu!

    Das Programm ist soweit halt noch nicht auf Daten über den Jahreswechsel eingestellt. Außerdem gibts bei Schaltjahren Probleme!

    Andy

    1. Hallo,

      Das Programm ist soweit halt noch nicht auf Daten über den Jahreswechsel eingestellt. Außerdem gibts bei Schaltjahren Probleme!

      Eben - ueber all diese Probleme (Monatswechsel, Jahreswechsel, Schaltjahre...)
      muss man sich keine Gedanken machen, wenn man einfach strtotime() verwendet...

      Gruesse,

      Thomas

      --
      Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
      Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
      Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
  3. Hi und danke erstmal,
    ich habe folgendes Programm geschrieben:

    <?php
    $time = strtotime("+2 week", $zeit);
    echo strftime("%d.%m.%Y", $time);
    ?>

    Wobei $zeit = 31.01.2003 ist.

    Als Ausgabe erhalt ich folgendes Datum: 15.01.1970

    Was habe ich falsch gemacht?

    Danke
    Gerd

    1. Hallo,

      $time = strtotime("+2 week", $zeit);
      Wobei $zeit = 31.01.2003 ist.

      Der zweite Parameter von strtotime() muss ein Timestamp sein, kein String.
      Und wenn schon Strings (im ersten Parameter),
      dann bitte in der richtigen Reihenfolge (mm.dd.yyyy).
      RTFM:
      http://www.php.net/manual/de/function.strtotime.php

      Gruesse,

      Thomas

      1. Hallo,

        Und wenn schon Strings (im ersten Parameter [von strtotime()]),
        dann bitte in der richtigen Reihenfolge (mm.dd.yyyy).

        Sorry, dort muss das Datum gemaess
        http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html#SEC100
        z.B. in folgendem Format sein:
        1970-09-17           # ISO 8601.
        70-9-17              # This century assumed by default.
        70-09-17             # Leading zeros are ignored.
        9/17/72              # Common U.S. writing.

        Gruesse,

        Thomas

        --
        Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
        Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
        Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
        1. z.B. in folgendem Format sein:
          1970-09-17           # ISO 8601.
          70-9-17              # This century assumed by default.
          70-09-17             # Leading zeros are ignored.
          9/17/72              # Common U.S. writing.

          Ich hab jetzt diesen Code:

          $datum = date('m/d/Y');
          $datum2 = strtotime("+2 week", $datum);
          echo strftime("%d.%m.%Y", $datum2);

          Und die Ausgabe: 15.01.1970

          Was mache ich falsch?

          MFG
          Gerd

          1. Hallo,

            $datum = date('m/d/Y');

            Du hast offenbar ein Problem, zwischen
            abstrakt und konkret zu unterscheiden.

            Abstrakt:
            Der String soll im Format m/d/y sein.
            Das heisst: Monat, dann Slash, dann Tag, dann Slash, dann Jahr.

            Konkret:
            Um einen konkreten String zusammenzubauen,
            musst Du es z.B. so schreiben:

            $d=31;
            $m=1;
            $y=2004;

            $datumstring="$m/$d/$y";

            oder (fuer das eindeutigere Format "y-m-d") so:

            $datumstring="$y-$m-$d";

            Und die Ausgabe: 15.01.1970
            Was mache ich falsch?

            Immer, wenn das Jahr 1970 vorkommt, ist das ein Hinweis
            darauf, dass eine Umwandlung ins Unix-Timestamp Format
            nicht funktioniert hat und dass deshalb ein Datum
            als Timestamp "0", d.h. 01.01.1970, 00.00.00 Uhr
            berechnet wurde...

            Bitte lies das Manual-Kapitel zu den Datums- und Zeit-Funktionen
            mal vollstaendig durch. Ebenso die dclp-FAQ zum Thema:
            http://www.dclp-faq.de/ch/ch-datetime.html

            Gruesse,

            Thomas