Mathiis: Differenz zwischen zwei Datumsangaben

Hallo,

für einen Kalender möchte ich eine Funktion einbauen, die einen Serientermin zulässt (täglich, wöchentlich, monatlich...).
Dazu habe ich ein StartDatum DD.MM.YYYY und ein Enddatum DD.MM.YYYY.
Ich habe nun die Daten mit substr auseinandergepflückt und in einzelne Variablen gepackt.
Dann mit

$utstart=mktime(0, 0, 0, $day1, $month1, $year1);
$utend=mktime(0, 0, 0, $day2, $month2, $year2);
$diff= ($utend - $utstart);
$diff=$diff/(60*60*24);

versucht die Differenz der Daten mit Hilfe von mktime herauszufinden.
Dabei kommt aber nur murks raus.

Weiß einer, wo mein Fehler liegt?

Danach wollte ich die Differenz nehmen und mit einer Schleife die Datenbankeinträge steuern.

  1. $utstart=mktime(0, 0, 0, $day1, $month1, $year1);
    $utend=mktime(0, 0, 0, $day2, $month2, $year2);

    Du gehst von falschen Tatsachen aus:
    Handbuch:
    int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
       <°)))o><                      ><o(((°>o
    1. $utstart=mktime(0, 0, 0, $day1, $month1, $year1);
      $utend=mktime(0, 0, 0, $day2, $month2, $year2);

      Du gehst von falschen Tatsachen aus:
      Handbuch:
      int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )

      mfg Beat

      Ich habe Strings, brauche aber int?

      1. $utstart=mktime(0, 0, 0, $day1, $month1, $year1);
        $utend=mktime(0, 0, 0, $day2, $month2, $year2);

        Du gehst von falschen Tatsachen aus:
        Handbuch:
        int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )

        mfg Beat

        Ich habe Strings, brauche aber int?

        nein, du hast   0, 0, 0, tag, monat, jahr
        erwartet wird   0, 0, 0, monat, tag, jahr

        das int/string-problem erledigt sich bei php quasi von selbst - allerdings ist es sauberer hier mit intval zu arbeiten

        1. nein, du hast   0, 0, 0, tag, monat, jahr
          erwartet wird   0, 0, 0, monat, tag, jahr

          Danke das du mir die Tomaten von den Augen genommen hast... ;-)

          1. Danke das du mir die Tomaten von den Augen genommen hast... ;-)

            das hör ich diese woche schon zum dritten mal ;)

            1. Hallo.

              Danke das du mir die Tomaten von den Augen genommen hast... ;-)

              das hör ich diese woche schon zum dritten mal ;)

              Du solltest dich weniger mit Kartoffeln unterhalten.
              MfG, at

      2. $utstart=mktime(0, 0, 0, $day1, $month1, $year1);
        $utend=mktime(0, 0, 0, $day2, $month2, $year2);

        Du gehst von falschen Tatsachen aus:
        Handbuch:
        int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )

        mfg Beat

        Ich habe Strings, brauche aber int?

        Wann hast du das letzte Mal das handbuch konsultiert?

        Da steht:
        Die Reihenfolge der Argumente in mktime ist:
        stunde
        minute
        sekunde
        monat
        tag
        jahr
        sommerzeit

        mfg Beat

        --
        Woran ich arbeite:
        X-Torah
           <°)))o><                      ><o(((°>o
        1. Jetzt gab es eine dreifache Antwort um die gleiche Minute.
          Ich hoffe der Fragesteller nimmt das nicht zu deftig an. Das kann passieren.

          mfg Beat

          --
          Woran ich arbeite:
          X-Torah
          ><o(((°>       ><o(((°>
             <°)))o><                      ><o(((°>o
          1. Jetzt gab es eine dreifache Antwort um die gleiche Minute.

            ich war aber der erste!!!!!!11111one :p

            1. Jetzt gab es eine dreifache Antwort um die gleiche Minute.
              ich war aber der erste!!!!!!11111one :p

              test

      3. int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )

        Ich habe Strings, brauche aber int?

        Nein, du hast Tomaten auf den Augen ^^ und solltest mal auf die Reihenfolge der Parameter achten.

  2. Hi,

    Dazu habe ich ein StartDatum DD.MM.YYYY und ein Enddatum DD.MM.YYYY.
    Ich habe nun die Daten mit substr auseinandergepflückt

    warum überhaupt? Wenn Du vorhast, zu vergleichen, dann solltest Du das Datum im Format YYYY.MM.DD speichern - dann reicht ein simpler String-Vergleich aus und Du musst den String lediglich für die Ausgabe neu formatieren.

    freundliche Grüße
    Ingo

    1. Hallo,

      Dazu habe ich ein StartDatum DD.MM.YYYY und ein Enddatum DD.MM.YYYY.
      Ich habe nun die Daten mit substr auseinandergepflückt
      warum überhaupt? Wenn Du vorhast, zu vergleichen, dann solltest Du das Datum im Format YYYY.MM.DD speichern - dann reicht ein simpler String-Vergleich aus und Du musst den String lediglich für die Ausgabe neu formatieren.

      vor allem weil es (in diversen Ländern) gesetzliche Vorschriften gibt, die die Sekundenrechnung mindestens an zwei Tagen im Jahr empfindlich stören ...

      Freundliche Grüße

      Vinzenz

  3. Hallo,

    $utstart=mktime(0, 0, 0, $day1, $month1, $year1);
    $utend=mktime(0, 0, 0, $day2, $month2, $year2);
    $diff= ($utend - $utstart);
    $diff=$diff/(60*60*24);

    Unabhängig vom Tag/Monat-Problem: Du gehst hier aber fälschlicherweise davon aus, dass ein Tag immer 24 Stunden hat. Das stimmt in Lokalzeit aber leider nicht (ein Tag im Jahr hat 23 Stunden und einer hat 25 Stunden - wegen der Zeitumstellung). Ich würde daher vorschlagen, gmmktime() statt mktime() zu verwenden, gmmktime() verwendet eine kontinuierliche Zeitskala. Es rechnet zwar immer in UTC (und damit in einer anderen Zeitzone, als Du lebst), aber zumindest die kalendarischen Berechnungen sind damit exakt.

    Alternativ könntest Du natürlich auch das ganze als Float-Division schreiben und dann runden, das halte ich aber für nicht sonderlich optimal.

    Oder Du rechnest von Hand, ich habe im Archiv etliche Postings zum Thema Datums- und Zeitberechnung in PHP verfasst.

    Viele Grüße,
    Christian