Benn: Datum + Tage ??

Hi Leute; ich steh wieder einmal auf der Leitung ... =)

ich zwar schon gesucht, aber hauptsächlich umformatierungsbefehle usw. gefunden

problem:
ich habe ein datum und möchte ganz einfach eine bestimmte anzahl von tagen hinzuzählen

mein erster gedanke war zerlegen;+tage;wieder zusammenfügen, bis mir eingefallen ist, dass somit der monat nicht angepasst wird (also, dass dan einfach das datum unbrauchbar wird weils über 31 tage geht)

wie rechnet man also am besten mit einem datum?

  1. Hallo,

    Datum in Timestamp umrechnen (wenn man ihn noch nicht hat)

    Timestamp + 3600*24*x-Tage // x steht für die Anzahl von Tagen

    echo date(..., timestamp)

    So ist das Grundprinzip, natürlich weiß ich das dort noch etliche Fehler drin sind (z.B. beim Echo), deswegen nur als Prinzip benutzen.

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  2. Halihallo Benn

    ich habe ein datum und möchte ganz einfach eine bestimmte anzahl von tagen hinzuzählen
    wie rechnet man also am besten mit einem datum?

    Das einfachste ist IMHO über die Unix-Timestamp, diese kann
    arithmetisch verarbeitet werden und ist zudem "Monats- und
    Schaltjahrsicher".

    zuerst musst du das Datum also in eine Unix-Timestamp konvertieren:
    http://www.php.net/strtotime, die Konvertierung läuft analog
    zu http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html.

    Dann kannst du mit dem Integer rechnen:

    $timestamp = strtotime("2004-02-19 18:10:05");

    $timestamp += 3*86400;  // 3*(3600*24) = +3 Tage

    und dann kannst du es zurück in ein "lesbares" Format transformieren:

    http://www.php.net/date

    dem du die $timestamp als zweiten Parameter übergibst und als ersten
    dein Format schreibst.

    Viele Grüsse

    Philipp

    1. thx für die schnelle und deutliche beantwortung

      ich werds wohl öfter gebrauchen können :-)

      Gruß
      Benn

    2. hi,

      http://www.php.net/strtotime

      wenn du diesen link schon nennst, solltest du auch seinem inhalt beachtung schenken:

      strtotime versteht durchaus parameter der form "+ 17 days" o.ä.

      das ist allemal sicherer, als hier auf einen timestamp 3600*24*x draufzurechnen - weil du dabei leicht probleme bekommst, wenn du über sommer-/winterzeitumstellung hinwegrechnest.

      gruss,
      wahsaga

      1. Halihallo wahsaga

        strtotime versteht durchaus parameter der form "+ 17 days" o.ä.
        das ist allemal sicherer, als hier auf einen timestamp 3600*24*x draufzurechnen - weil du dabei leicht probleme bekommst, wenn du über sommer-/winterzeitumstellung hinwegrechnest.

        Das ist richtig. Ich ging jedoch davon aus, dass Benn bereits ein
        Datum vorliegen hat (welches sich des öfteren von dem aktuellen
        unterscheidet) und somit fällt dies den Bach runter. Falls jedoch
        das aktuelle Datum bearbeitet werden soll, ist dies bestimmt die
        bessere Variante.

        Viele Grüsse

        Philipp

        1. hi,

          Das ist richtig. Ich ging jedoch davon aus, dass Benn bereits ein
          Datum vorliegen hat (welches sich des öfteren von dem aktuellen
          unterscheidet) und somit fällt dies den Bach runter.

          nein, wieso?

          strtotime kann als zweiten parameter einen beliebigen timestamp bekommen. nur, wenn du diesen zweiten parameter ganz weglässt, wird automatisch das aktuelle datum hergenommen.

          die berechnung "+17 days" (_erster_ parameter der funktion) funktioniert aber in beiden fällen.

          gruss,
          wahsaga

          1. Halihallo wahsaga

            strtotime kann als zweiten parameter einen beliebigen timestamp bekommen. nur, wenn du diesen zweiten parameter ganz weglässt, wird automatisch das aktuelle datum hergenommen.
            die berechnung "+17 days" (_erster_ parameter der funktion) funktioniert aber in beiden fällen.

            wahsaga, Du hast natürlich recht. Keine Ahnung, warum ich da einen
            Stuss zusammengeschrieben habe... Das man mal etwas überliest kann
            ja mal passieren, aber das mir diese Unlogik und Inkonsistenz in
            meiner Annahme (dass strtotime keine Timestamp entgegennimmt) nicht
            aufgefallen ist (sogar über mehrere Postings hinweg!), beunruhigt
            mich. Danke für die Berichtigung.

            Viele Grüsse

            Philipp

      2. Halihallo wahsaga

        das ist allemal sicherer, als hier auf einen timestamp 3600*24*x draufzurechnen - weil du dabei leicht probleme bekommst, wenn du über sommer-/winterzeitumstellung hinwegrechnest.

        BTW: Das sollte eigentlich gar kein Problem machen, denn die
        Timestamp wird IMHO intern als GMT-Zeit gespeichert, welche keine
        Sommer-/Winterzeit kennt. Wenn man diese GMT-Timestamp dann normal
        über date formatiert, wird die lokale Zeitzone "aufgerechnet", welche
        im Winter +0100 (Winterzeit) und im Sommer +0200 (Sommerzeit) ist.

        Aber wie gesagt: Falls das aktuelle Datum geändert werden soll, muss
        man wirklich keinen Umweg über die Timestamp machen.

        Viele Grüsse

        Philipp