Datumsdifferenz
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
alt
alters
beitrag
date
daten
differenz
eigentlichen geburtstag
fehler
format
funktion
jahr
konkretes beispiel
lag
liege
lsen
schaltjahr
sekunde
vermutung
vielen dank
vielen jahren
-
Ich habe zwei Daten im timestamp-Format. Ich möchte nun berechnen, wie viele Jahre die Daten auseinander liegen. Konkret geht es darum, dass ich auf meiner Website mein Alter immer automatisch aktualisiert haben möchte. Grundsätzlich könnte man ja die Differenz berechnen, die dann in Sekunden vorliegen würde. Mein Problem: Wenn zwischen den beiden Daten ein Schaltjahr lag, wird es nicht richtig aktualisiert. Oder liege ich in meiner Vermutung falsch? Ich habe es noch nicht ausprobiert.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wenn es nur auf ein jahr genau sein muss, ist der fehler, der durch schaltjahre entsteht ziemlich klein, das heißt es würde erst nach sehr vielen jahren ein fehler bemerkbar werden.
-
Ich habe zwei Daten im timestamp-Format. Ich möchte nun berechnen, wie viele Jahre die Daten auseinander liegen. Konkret geht es darum, dass ich auf meiner Website mein Alter immer automatisch aktualisiert haben möchte. Grundsätzlich könnte man ja die Differenz berechnen, die dann in Sekunden vorliegen würde. Mein Problem: Wenn zwischen den beiden Daten ein Schaltjahr lag, wird es nicht richtig aktualisiert. Oder liege ich in meiner Vermutung falsch? Ich habe es noch nicht ausprobiert.
Außerdem weiß auch der Rechner, wann ein Schaltjahr ist und kann es so ausrechnen.
SOnst musst du halt eine Funktion schreiben wo er das überprüft und dann ausrechnet. -
Wenn du dein Alter immer aktuell irgendwo ausgeben willst dann nimm einfach diese Funktion:
<?php /* Funktion zum berechnen des Alters */ function getage($birthday) { if (eregi("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})",$birthday)) { $exp=explode(".",$birthday); $now=mktime(0,0,0,date("m"),date("d"),date("Y")); $birth=mktime(0,0,0,$exp[1],$exp[0],2000); $age=intval(($now-$birth)/(3600 * 24 * 365)); $age=$age+(2000-$exp[2]); return ($age); } } ?>
Der Funktion übergibst du dein Geburtsdatum einfach in dieser Form: DD.MM.JJJJ
Beispiel:
<?php echo getage('31.07.1989'); ?>
Würde 17 ausgeben.
Beitrag geändert: 6.7.2007 13:18:48 von ******* -
Der Code von ******* wäre genau das was ich selber geschrieben hätte, nur löst das mein Problem mit den Schaltjahren nicht. Gebe ich beispielsweise als Geburtsdatum den 07.07.1989 ein, wird 18 ausgegeben, obwohl jemand mit diesem Geburtsdatum nur 17 Jahre alt ist.
-
Du könntest das so lösen. Ist zwar etwas umständlich, müsste aber funktionieren:
<?php function getage($time) { if (date('m',$time) == date('m')) { if (date('d',$time) >= date('d')) return (date('Y')-date('Y',$time)); else return (date('Y')-date('Y',$time)-1); } elseif (date('m',$time) < date('m')) { return (date('Y')-date('Y',$time)); } else { return (date('Y')-date('Y',$time)-1); } } ?>
-
Die Scripts von sandrock-jonas sowie von ******* haben ein Problem: Ein Tag vor dem eigentlichen Geburtstag wird ein Jahr dazugezählt.
Vielleicht funktioniert das wirklich nicht?!?
edit:
Vielleicht noch ein konkretes Beispiel zu meinem vorherigen Eintrag:
Heute ist der 6.7.07
Wenn jemand am 7.7.07 Geburtstag hat, wird nun bei den obigen Scripts schon am 6.7.07 das Alter auf 18 Jahre erhöht. Ich möchte dies aber erst am eigentlichen Geburtstag erhöht haben.
Beitrag geändert: 7.7.2007 11:17:42 von occhi -
Meine Funktion hat im Prinzip schon die Schaltjahre beachtet. Aber ich hab ein größer-kleiner Zeichen falschrum gesetzt. Hier die richtige Version:
<?php function getage($time) { if (date('m',$time) == date('m')) { if (date('d',$time) <= date('d')) return (date('Y')-date('Y',$time)); else return (date('Y')-date('Y',$time)-1); } elseif (date('m',$time) < date('m')) { return (date('Y')-date('Y',$time)); } else { return (date('Y')-date('Y',$time)-1); } } ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage