Tage zwischen zwei Daten ausgeben

  • Hallo zusammen! :D

    Ich möchte mit PHP die Tage zwischen einem Anmeldedatum und dem Heutigen ausgeben lassen. In der DB ist das Anmeldedatum, als TEXT, in dieser Form gespeichert (Bsp) 12.01.2006.

    fg_geburtstag ist das Anmeldedatum!

    Jedoch wird immer -1 ausgegeben. Wieso?

    Danke schonmal im vorraus!

  • versuche es mal so:

    Code
    $sql = "SELECT UNIX_TIMESTAMP(`fg_geburtstag`) FROM `freshagotschi` WHERE `login`='$login'";
    
    
    list($fg_geburtstag) = mysql_fetch_row(mysql_query($sql));
    
    
    echo floor(($fg_geburtstag - time())/ 86400);

    und gucke dir auf de.php.net mal den genauen syntax für mktime an.

  • Habe mal deinen Quellcode ausprobiert, da kommt eine ganz große Zahl raus ^^ (13161)

    Hatte mir die Sachen über mktime durchgelesen. Das Problem ist, dass ich grad erst mit PHP angefangen habe und kompliziertere Sachen noch nicht verstehe. In dem Fall wie ich hier die Variable reinbekomme:

    [int Stunde [, int Minute [, int Sekunde [, int Monat [, int Tag [, int Jahr [, int is_dst]]]]]]]

  • Ne, in der Datenbank steht das so: 10.01.2006
    Und so wird auch $fg_geburtstag ausgegeben.

    So lese ich das bei der Anmeldung ein:
    <?php $timestamp = time(); ?><?php $fg_geburtstag = date("d.m.Y",$timestamp); ?>

  • Moin!

    Du Dussel :lol:

    Warum schreibst du denn nicht einfach den Timestamp von dem Geburtsag in die Datenbank anstatt einer Varible ?

    Zitat von Anonymous

    So lese ich das bei der Anmeldung ein:
    <?php $timestamp = time(); ?><?php $fg_geburtstag = date("d.m.Y",$timestamp); ?>


    Das hieße ja, daß der Tag der Geburt = Tag der Anmeldung ist.
    Mir ist zwar bekannt, daß die User immer jünger werden, aber direkt nach der Geburt wird wohl auch in 1000 Jahren noch niemand online gehen. Ich vermute mal, daß du das Geburtsdatum irgendwie anders abfragst und dann umwandelst, oder ?

    Gut, das war ja hier nicht die Fragestellung, sondern wie du das Datum zurück bekommst.
    So geht es:

    Zitat von Anonymous

    in der Datenbank steht das so: 10.01.2006

    Das Datum ist also ein Textstring. Diesen mußt du nun ganz einfach nach Tag + Monat + Jahr zerlegen.
    Da du einen Punkt als Trenner benutzt ist das ganz einfach:

    PHP
    <?php
    list($Tag,$Monat,$Jahr) = split(".",$fg_geburtstag);
    ?>

    Nun mußt da im nächsten Schritt das ganze in einen Tiemstamp umwandeln:

    PHP
    <?php
    $geb_time = mktime(0,0,0,$Monat,$Tag,$Jahr);
    echo "$geb_time = ".date("d.m.y",$geb_time);
    ?>

    Voila ...

    G.a.d.M.

    Ronald

  • Hehe.. das Geburtsdatum ist nicht das Geburtsdatum des Users ^^ Das ganze soll eine Art Tamagotschi werden. Und das Anmeldedatum ist das Geburtsdatum des Tieres :D

    Bei dem Umwandeln in den Timestamp gibt es leider ne Fehlermeldung.
    "Warning: mktime() expects parameter 4 to be long, string given in /home/d00055/websites/http://freshn.de/fg-main.php on line 25"

  • Zitat von Knüps

    Hehe.. das Geburtsdatum ist nicht das Geburtsdatum des Users ^^ Das ganze soll eine Art Tamagotschi werden. Und das Anmeldedatum ist das Geburtsdatum des Tieres :D

    Oh Gott .... :roll:

    PHP
    <?php
    $Jahr = substr($Jahr,-2);
    $geb_time = mktime(0,0,0,$Monat,$Tag,$Jahr);
    echo "$geb_time = ".date("d.m.y",$geb_time);
    ?>

    So sollte es dann gehen.
    Ich kapiere einfach nicht, warum man die Jahreszahl nur zweistellig eingeben darf ....

    G.a.d.M.

    Ronald

  • Irgendwie bin ich langsam ein wenig verwirrt :D

    Ich habe nun folgenden Quellcode:

    Und ausgegeben wird:
    "Warning: mktime() expects parameter 4 to be long, string given in /home/d00055/websites/http://freshn.de/fg-main.php on line 24
    = 01.01.70-1"

    Line 24 ist folgende:

    Code
    $geb_time = mktime(0,0,0,$Monat,$Tag,$Jahr);
  • OMG du stellst dich aber selten dämlich an. Lies dir nochmals genau durch was du da machst.


  • Ich nehme das mal als Kompliment ^^

    Das Problem ist, dass ich bei PHP (noch) nicht allzuviel raffe. Ich kommentiere einfach mal was der, meiner Meinung nach, da macht.

  • also das dämlcih bezieht sich auf dein oberes script.

    das du eien variabelle erst hin und dann wieder zurück konvertierst, was ja sinnlos ist.

    also das mktime wandelt ein datum in einen unixtimestamp um.

    also die zeit in sekunden gezählt seit dem 00:00 01.01.1970
    was ja mitlerweile eine recht große natürliche zahl ergiebt.

    Das wird deswegen gemacht weil es sich damit am besten rechnen lässt.

    und time(); giebt die aktuelle Zeit als unixtimestamp aus.

    http://www.unixtimestamp.de/

    so das sollte reichen. Alles was du da so schreibst stimmt so weit.

    .... 86400 sekunden sind ein Tag. Damit rechnest du den aus wie viele tage als dez zahl dein tierchen existierst.

  • Zitat

    also das dämlcih bezieht sich auf dein oberes script.

    das du eien variabelle erst hin und dann wieder zurück konvertierst, was ja sinnlos ist.

    Wo genau mache ich das denn?

    Stimmt, das hatte ich gelesen. Aber wenn das von Prinzip her richtig ist wieso wird dann sowas sinnloses ausgegeben? Bzw woher kommt die Fehlermeldung?

    Tut mir leid wenn ich mich etwas dumm anstelle, aber ich hab da irgendwie nicht den durchblick :roll:

  • Der Fehler liegt ganz woanders und zwar genau hier:

    Code
    list($Tag,$Monat,$Jahr) = split(".",$fg_geburtstag);

    Da der Punkt ein Funktionszeichen ist, er hier aber als (String)Trennzeichen benötigt wird, müssen wir ihn mit schützenden Backslashes versehen:

    Code
    list($Tag,$Monat,$Jahr) = split("\\.",$fg_geburtstag);


    Nun klappt es auch wieder mit der vierstelligen Jahreszahl - ich war wohl etwas müde gestern:

    Wenn es jetzt immer noch nicht geht, dann liegt das an deiner Datenbank ;)

    G.a.d.M.

    Ronald

  • stimmt ronald. oder ersetzte das split einfach durch explode

    das geht besser. Den split lässt ja die punkte. und explode entfernt die punkte. also geht deins auch noch nicht gnaz ronald.

    list($Tag,$Monat,$Jahr) = explode('.' ,$fg_geburtstag);

  • Zitat von GreenRover

    stimmt ronald. oder ersetzte das split einfach durch explode

    das geht besser. Den split lässt ja die punkte. und explode entfernt die punkte. also geht deins auch noch nicht gnaz ronald.

    Wo hast du diese Fehlinformation her?

    Es funktioniert genau so, wie ich es beschrieben habe.

    Der Unterschied zwischen Split und explode ist, daß split reguläre Ausdrücke benutzt und explode nicht. Ob du hier nun split oder explode benutzt ist ziemlich chico, da ja nur ein einzelner Punkt als Trennzeichen benutzt wird.

    G.a.d.M.

    Ronald