PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   jahre, monate und tage zählen (http://www.selfphp.de/forum/showthread.php?t=5892)

thedoctor 24.10.2003 11:03:25

jahre, monate und tage zählen
 
Hallo!
Ich möchte gerne von einem bestimmten Datum (kann auch Jahre zurück liegen) bis zum heutigen Datum die Jahre, Monate und Tage zählen. Also dass zum Beispiel da steht "Sei dem (datum) sind bis heute xx Jahre, xx Monate und xx Tage bis heute vergangen. Bitte um Antwort!

mfg thedoctor

xabbuh 24.10.2003 12:51:06

Das könntest du zum Beispiel so machen:

Zunächst erstellst du mit der Funktion mktime() den Timestamp des Datum von wo aus du die Sekunden zählen willst und speicherst diesen in der Variablen $datum_alt.

PHP-Code:

$heute=time(); //DER AKTUELLE TIMESTAMP
$dauer=$heute-$datum_alt//DIE SEKUNDEN DIE ZWISCHEN DIESEN BEIDEN DATEN LIEGEN

echo "Seit dem " date("d.m.Y"$datum_alt) . " sind " $dauer " Sekunden vergangen."


Nev 24.10.2003 13:30:00

Hi @ll

wie gefällt euch folgende Möglichkeit:

Code:

    function daysDiff($y1, $m1, $d1) {
        $y2 = date("Y");
        $m2 = date("m");
        $d2 = date("d");
        $time1 = mktime(0,0,0,$m1,$d1,$y1);
        $time2 = mktime(0,0,0,date("m"),date("d"),date("Y"));
        if (($time1 - $time2)<0) {
            $y = $y2 - $y1;
            $m = $m2 - $m1;
            $d = $d2 - $d1;
            $display = "vergangen ";
        } else {
            $y = $y1 - $y2;
            $m = $m1 - $m2;
            $d = $d1 - $d2;
            $display = "noch ";
        }
        $daysInMonth = date("t",$m1);
        if ($d < 0) {
            $m--;
            $d = $d + $daysInMonth;
        }
        if ($m < 0) {
            $y--;
            $m = $m + 12;
        }

        if ($y > 0) {
            $display .= $y==1 ? "1 Jahr und " : "$y Jahre und ";
        }
        $display .= $m==1? "1 Monat und " : "$m Monate und ";
        $display .= $d==1 ? "1 Tag " : "$d Tage ";
        return $display;
    }
   
    echo daysDiff(2003, 11, 24);


xabbuh 24.10.2003 13:59:10

Ist die Lösung für so ein vergleichsweise kleines Problem ein bisschen umständlich? Meiner Meinung nach kann man dies auch mit wenigen Zeilen lösen (s.o.).

Nev 24.10.2003 14:06:05

kommt drauf an was du ausgeben willst

hast dir das Ding mal genauer angeschaut?

thedoctor 24.10.2003 14:15:58

Hey, soweit funktioniert es, jetzt gibt er mir bloss noch eine falsche Jahreszahl aus. Aber das werde ich (hoffentlich) in den Griff bekommen. Vielen Dank euch 2! Ihr habt mir sehr geholfen

mfg thedoctor

Nev 24.10.2003 14:24:33

Code:

    function daysDiff($y1, $m1, $d1) {
        $y2 = date("Y");
        $m2 = date("m");
        $d2 = date("d");
        $time1 = mktime(0,0,0,$m1,$d1,$y1);
        $time2 = mktime(0,0,0,date("m"),date("d"),date("Y"));
        if (($time1 - $time2)<0) {
            $y = $y2 - $y1;
            $m = $m2 - $m1;
            $d = $d2 - $d1;
        } else {
            $y = $y1 - $y2;
            $m = $m1 - $m2;
            $d = $d1 - $d2;
        }
        $daysInMonth = date("t",$m1);
        if ($d < 0) {
            $m--;
            $d = $d + $daysInMonth;
        }
        if ($m < 0) {
            $y--;
            $m = $m + 12;
        }

        if ($y > 0) {
            $display .= $y==1 ? "1 Jahr, " : "$y Jahre, ";
        }
        $display .= $m==1? "1 Monat und " : "$m Monate und ";
        $display .= $d==1 ? "1 Tag " : "$d Tage ";
        return $display;
    }
   
    echo daysDiff(2003, 11, 24);
   
    echo "seit dem 20.09.00 sind ".daysDiff(2000,9,24)." vergangen";

an der Funktion wurden nur Formatierungen gemacht

thedoctor 24.10.2003 14:29:02

Danke, danke ;-)
Es funktioniert jetzt alles!

mfg thedoctor


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:23:52 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.