Abstand zwischen einem Tag und jetzt in Jahren, Monaten, etc
Alpha
- php
Moin Leute, ich will auf meiner Homepage mein Alter im Jahren, Monaten, Wochen, Tagen, Stunden und Minuten angeben!
Mein Geburtstag ist der 08.12.1985, 13:40 Uhr (UNIX: 502893601)
Ich hab es versucht so gut es geht, habs aber nicht hingekriegt!
Da kamen am Ende Abweichungen von 2 Wochen raus. Gibt es dafür eine Funktion?
Wenn nicht, weiß jemand eine Ausgabemethode?
Danke schonmal...
Hallo,
es gibt eine einfache Lösung mit einem Haken:
heute = time() = Millisekunden seit dem 1.1.1970
eingebener Geburtstag in Millisekunden umgerechnet = meinezeit
heute - meinezeit = deine_lebenszeit_in_millisekunden
dann mittels mathematik umrechnen erst mod in jahre dann mod in monate usw.
Der haken ist allerdings, daß niemand älter sein sollte als 33 Jahre.
Sicher dass es Millisekunden seit dem 1.1.1970 sind?!
Ich hab es auch so gemacht!
Es hat bei den Jahren noch gestimmt, allerdings waren es dann 19 Monate... ich check meinen Fehler nicht! Vielleicht hab ich auch nur ein Brett vorm Kopf!
Kann mir nicht jemand mal die Schritte Jahre und Monate machen?
Hallo
UNIX-Zeit, also das was time() ausspuckt sind Sekunden, nur so zur Klarstellung - mit Millisekunden wären wir wohl schon in höheren Zahlen-Bereichen...
cu Benedikt Loepp
Ups, mein Fehler, sorry.
Hi!
Das Problem bei dieser Sache sind die Schaltjahre.
Wenn du einfach subtrahierst und den resultierenden Wert durch die entsprechende Werte (365/jahr, 30/monat) dividierst, wird darauf keine Rücksicht genommen.
du müsstest also
zuerst time() - geburtstagstime -> Gesamtsumme
dich jahreweise bis zu deinem letzten geburtstag vorarbeiten (wieviele Tage sind es vom 8.12.1985, 13.40 bis zum 8.12.2002,13.40)
dieses von der Gesamtsumme abziehen
dann monatsweise weiter bis zum letzten 8., 13.40(also 8.8.2003, 13.40) (wieder die Anzahl der Tage abziehen)
und dann die restlichen tage, stunden und minuten ausrechnen.
Hofe ich habe dir geholfen!
mfG andi
hi!
ich kenne dafuer keine fertige php-funktion, aber mit date() kann man so einiges erreichen:
folgende funktion subtrahiert einfach paarweise die einzelnen zeiteinheiten voneinander ab: also jetziges jahr minus geburtsjahr, jetziger monat minus geburtsmonat, usw.
function timeDiffToNow($then_y, $then_m, $then_d, $then_h, $then_min){
$now_y=date("Y");
$now_m=date("n");
$now_d=date("j");
$now_h=date("G");
$now_min=date("i");
$diff_y=$now_y-$then_y;
$diff_m=$now_m-$then_m;
$diff_d=$now_d-$then_d;
$diff_h=$now_h-$then_h;
$diff_min=$now_min-$then_min;
if($diff_min<0){
$diff_min+=60;
$diff_h--;
}
if($diff_h<0){
$diff_h+=24;
$diff_d--;
}
if($diff_d<0){
$diff_d+=date("t", mktime(0,0,0,1, $then_m, $then_y));
$diff_m--;
}
if($diff_m<0){
$diff_m+=12;
$diff_y--;
}
print $diff_y."-".$diff_m."-".$diff_d.", ".$diff_h.":".$diff_min;
}
timeDiffToNow(1985, 12, 8, 13, 40);
zudem muessen noch die uebertrege beruecksichtigt werden, d.h. die differenz zwischen 13.59 und 14.00 ist nicht 1 stunde und -59 minuten, sondern eben nur eine minute. das wird mit den if-abfragen bewerkstelligt. wie man sieht, ist das bei den monaten nicht ganz so einfach, da jene unterschiedlich lang sind.
schwierig wird's bei solchen abstaenden wie z.b. dem zwischen 30.april und 31.mai: 1 monat und 1 tag oder 31 tage? das ist dann ansichtssache...
der code wuerde ersteres ausgeben.
prost
seth
ps. hab den code uebrigens noch nicht oft getestet, solltest ihn also nochmal genau durchgehen.
pps. ach so, du wolltest ja noch die wochen ausgeben... ok, das wuerde dann mit modulo-rechnung gehen: der ganzzahlige anteil von $diff_d/7 liefert die wochen und $diff_d%7 die restlichen tage.
ppps. uebrigens: glaubst du, dass deine geplante anzeige irgendjemanden interessiert? imho ist sowas eher sinnfrei. ;-)