Differenz von 2 Datumswerten

Armageddon86M

Grünschnabel
Ich habe das Problem, das wenn ich ich den einen Wert von dem heutigen Datumswert abziehe 1 Monat und ein paar Tage zu viel raus kommen.
Folgenden code verwende ich.

PHP:
    function chkGNull($num) {return $num > 0?true:false;}

    function retDiff($time) {
        $diff = time() - $time;
        $diff_y = (date('Y', $diff) - 1970);
        $diff_m = date('m', $diff);
        $diff_d = date('d', $diff);
        return (
            (chkGNull($diff_y)?$diff_y. ' Jahre, ':'').
            (chkGNull($diff_m)?$diff_m. ' Monate, ':'').
            (chkGNull($diff_d)?$diff_d. ' Tage':''));
    }
    echo(retDiff(mktime(0, 0, 0, 1, 15, 2007)));
als Ergebnis erhalte ich "10 Monate, 29 Tage", es dürften aber nur "09 Monate, 4 Tage" raus kommen.

Ich bedanke mich schonmal für die Hilfe.
 
Hallo

Woher kommt, denn der Wert von $time ?
Wurde dieser villeicht auf einem anderen Server oder irgendwie anderst generiert bzw.
hast du ihn mal direkt versucht umzurechnen und dann mal per "Hand" subtrahiert ?

Die Funktion "chkGNull" ist sinnlos, da if ja sowieso nur true Werte (Alles größer 0) als richtig ansieht, wenn man nur die Variable als Bedingung nimmt.
 
Naja, du liegst mit deiner Schätzung "09 Monate, 4 Tage" aber auch knapp daneben, ich kommt auf "09 Monate, 27 Tage", also beschwer dich nicht über PHP ;)

Erstmal musst du in der Funktion beim Monat und beim Tag jeweils 1 abziehen, genauso wie du schon beim Jahr 1970 abgezogen hast. Damit bleibt allerdings immer noch der Fehler von einem Tag.

Ich vermute das liegt ganz einfach daran, dass die Monate unterschiedlich viele Tage haben und daher zwischen dem 1.1.1970 und dem 28.10.1970 nicht genauso viele Tage sind, wie zwischen dem 15.01.2007 und dem 11.11.2007. Allerdings kann ich im Moment auch nicht mehr ganz so klar denken, vielleicht fällt mir Morgen noch ein anderer Fehler auf...
 
Hallo

Woher kommt, denn der Wert von $time ?
Wurde dieser villeicht auf einem anderen Server oder irgendwie anderst generiert bzw.
hast du ihn mal direkt versucht umzurechnen und dann mal per "Hand" subtrahiert ?

Die Funktion "chkGNull" ist sinnlos, da if ja sowieso nur true Werte (Alles größer 0) als richtig ansieht, wenn man nur die Variable als Bedingung nimmt.
Nein, der wird auf dem gleichen server generiert.
Du hast Recht, die Funktion "chkGNull" ist sinnlos, mein Fehler, aber darin kann der Fehler nicht liegen, trotzdem danke.

Naja, du liegst mit deiner Schätzung "09 Monate, 4 Tage" aber auch knapp daneben, ich kommt auf "09 Monate, 27 Tage", also beschwer dich nicht über PHP ;)

Erstmal musst du in der Funktion beim Monat und beim Tag jeweils 1 abziehen, genauso wie du schon beim Jahr 1970 abgezogen hast. Damit bleibt allerdings immer noch der Fehler von einem Tag.

Ich vermute das liegt ganz einfach daran, dass die Monate unterschiedlich viele Tage haben und daher zwischen dem 1.1.1970 und dem 28.10.1970 nicht genauso viele Tage sind, wie zwischen dem 15.01.2007 und dem 11.11.2007. Allerdings kann ich im Moment auch nicht mehr ganz so klar denken, vielleicht fällt mir Morgen noch ein anderer Fehler auf...
Ja, stimmt, hatte mich da auf meine Freundin verlassen :-), es kam wirklich "09 Monate, 27 Tage" raus.


Bei dem Datum
PHP:
retDiff(mktime(0, 0, 0, 3, 2, 2007))
bzw.
PHP:
retDiff(mktime(0, 0, 0, 3+1, 2+1, 2007))
macht ers aber komplett falsch.
Ich lasse das mal mit den Zeitwerten subtrahieren und mache das stattdessen per Hand.

Danke für die Hilfe.
 
Zuletzt bearbeitet:
Zurück