Alter ausrechnen
Ilona :)
- php
0 Sebastian Becker0 Sebastian Becker0 Ilona0 Sebastian Becker0 Ilona0 Ilona
Gute Nacht! ;-)
Ich möchte das Alter eines bestimmten Subjekts ausrechen, d.h. wie alt jemand demnächst werden wird.
$tmpstmp_gtag = mktime(date(H),date(i),date(s),$gebmon,$gebtag,date(Y));
$jahre_gtag = getdate($tmpstmp_gtag);
$jahre = $jahre_gtag["year"]-$gebjahr;
Allerdings wird so das falsche Alter ausgerechnet, wenn der Geburtstag erst im nächsten Jahr ist (05.01 oder so), aber die Ausgabe $jahre noch im alten Jahr erfolgt.
Ich hoffe jemand macht sich die Mühe sich da reinzudenken, Danke!
Grüße,
Ilona
Hallo, Ilona,
Ich möchte das Alter eines bestimmten Subjekts ausrechen, d.h. wie alt jemand demnächst werden wird.
$tmpstmp_gtag = mktime(date(H),date(i),date(s),$gebmon,$gebtag,date(Y));
$jahre_gtag = getdate($tmpstmp_gtag);
$jahre = $jahre_gtag["year"]-$gebjahr;
Allerdings wird so das falsche Alter ausgerechnet, wenn der Geburtstag erst im nächsten Jahr ist (05.01 oder so), aber die Ausgabe $jahre noch im alten Jahr erfolgt.
Versuch's mal so ...
<?php
function getAge($m,$d,$y)
{
$now = getdate();
$nmonth = $now['month'];
$nday = $now['mday'];
$nyear = $now['year'];
if($nmonth<$m OR $nmonth=$m AND $nday<$d) {$age=$nyear-$y-1;}
else{$age=$nyear-$y; }
return $age;
}
echo getAge(12,20,1992);
?>
Gute Nacht! ;-)
Sebastian
Hallo, Ilona,
hier noch eine Variante ...
http://zend.com/codex.php?id=614&single=1
Jetzt aber endgültig gute Nacht und süße Träume! ;-)
Sebastian
Hallo Sebastian,
vielen Dank für Deine Antwort!
Ich habe aber noch ein Problem:
Es soll nicht das Alter eines Subjekts zu einem bestimmten Datum angezeigt werden, sondern wie alt ein Subjekt am letzten/kommenden Geburtstag geworden ist/werden wird. Es ist in zwei Variablen festgelegt, wieviele Tage vor/nach dem Geburtstag das Subjekt angezeigt wird. Wenn jetzt allerdings jemand mit Geburtstag am 05.01. bereits das Jahr davor am 27.12. angezeigt wird, woher weiß ich dann wie alt er wird?
Ganz liebe Grüße,
Ilona
Hallo, Ilona,
Es soll nicht das Alter eines Subjekts zu einem bestimmten Datum angezeigt werden, sondern wie alt ein Subjekt am letzten/kommenden Geburtstag geworden ist/werden wird. Es ist in zwei Variablen festgelegt, wieviele Tage vor/nach dem Geburtstag das Subjekt angezeigt wird. Wenn jetzt allerdings jemand mit Geburtstag am 05.01. bereits das Jahr davor am 27.12. angezeigt wird, woher weiß ich dann wie alt er wird?
Das ist mir irgendwie zu hoch. Kannst Du mal ein konkretes Beispiel angeben oder die unfertige Seite zeigen?
Grüße,
Sebastian
$tage_jetzt = time()/(3600*24);
$tmpstmp_gtag = mktime(date(H),date(i),date(s),$gebmon,$gebtag,date(Y));
$tage_gtag = $tmpstmp_gtag/(3600*24);
$tage_diff = round($tage_jetzt-$tage_gtag);
$jahre_gtag = getdate($tmpstmp_gtag);
$jahre = $jahre_gtag["year"]-$gebjahr;
if (($tage_diff==0)||(($tage_diff<0)&&!($tage_diff<$tagevor))||(($tage_diff>0)&&!($tage_diff>$tagenach))) {
...
}
Mit den Variablen $tagevor und $tagenach wird festgelegt, wie lange vor/nach dem Geburtstag der Geburtstag noch angezeigt werden soll.
Ich danke dir schon jetzt für deine Hilfe!
Ilona :)
Hallo Sebastian,
noch ein konkretes Beispiel:
Jemand hat am 05.01.1982 Geburtstag.
Es ist der 27.12.2003.
Es ist eingestellt, dass der Geburtstag bereits 10 Tage vorher angezeigt wird.
Nun rechnet der von mir bisher erstellte und leider unzureichende Code als kommendes Alter 21 aus. Es müsste aber 22 herauskommen.
Grüße,
Ilona
Hallo, Ilona,
hier mein Versuch (bitte ausgiebig testen und Bescheid geben, ob es klappt - es können noch Fehler drin sein!) ...
Grüße,
Sebastian
-------------------- schnipp --------------------
<?php
$gebtag = 22;
$gebmon = 1;
$gebjahr = 1980;
$tagevor = 365;
$tagenach = 14;
// prüfen, ob Geburtstag im laufenden Jahr bereits vorbei ist
$korrekturwert=0;
if($gebmon<date("m")||($gebmon==date("m")&&$gebtag<=date("d")))$korrekturwert=1;
// ich habe den Code für mein besseres Verständnis etwas geändert
// vielleicht war das Original aber auch korrekt
$tage_jetzt = round(time()/(3600*24));
$tmpstmp_gtag = mktime(date(H),date(i),date(s),$gebmon,$gebtag,date(Y)+$korrekturwert);
$tage_gtag = round($tmpstmp_gtag/(3600*24));
$tage_diff = $tage_jetzt-$tage_gtag;
$tage_diff_pos = $tage_diff*-1;
$jahre_gtag = getdate($tmpstmp_gtag); // Array
$jahre = $jahre_gtag["year"]-$gebjahr;
echo "Geburtstag: $gebtag. $gebmon. $gebjahr<br><br>";
echo "Das Subjekt ";
if($tage_diff==0) {echo "wird heute";}
else if(($tage_diff<0)&&(($tage_diff*-1)<=$tagevor)) {echo "wird an seinem nächsten Geburtstag in $tage_diff_pos Tagen";}
else if(($tage_diff>0)&&($tage_diff<=$tagenach)) {echo "wurde vor $tage_diff Tagen";}
else {echo "ist";}
echo " $jahre Jahre alt.<br><br>";
?>
Hallo Sebastian,
erst einmal vielen vielen Dank für deine Mühe, und das noch so spät nachts ;-)
Aber das Problem ist damit leider nicht gelöst, denn es soll ja das Geburtsdatum vor und NACH dem Geburtstag noch angezeigt werden.
Grüße,
Ilona
Hallo, Ilona,
Aber das Problem ist damit leider nicht gelöst, denn es soll ja das Geburtsdatum vor und NACH dem Geburtstag noch angezeigt werden.
ich glaub', jetzt geb' ich auf! Macht das das Skript denn nicht? Hast Du das mit verschiedenen Daten ausprobiert? Wenn ja, mußt Du einfach logisch vorgehen und Dich fragen, unter welchen Umständen welche Variable einen falschen Wert annimmt. Dort mußt Du dann ggf. eine Fallunterscheidung vornehmen.
Laß Dir doch zunächst einmal alle Variablen ausgeben. Noch besser kannst Du testen, wenn Du Dir ein Formular baust, in das Du die zu definierenden Variablen (also Geburtsdatum etc.) eingibst, die dann auf einer sich selbst aufrufenden Seite verarbeitet werden.
Mehr kann ich auch nicht machen - und ich habe noch nicht einmal verstanden, wo denn jetzt eigentlich noch das Problem liegt. Da dieser Thread bald verschwindet, kannst Du mir ja per email Bescheid geben, ob Du so weiterkommst ...
Grüße aus Berlin,
Sebastian
Hallo Sebastian,
es werden immer nur kommende oder vergangene Geburtstage angezeigt, je nachdem, ob ich den korrekturwert erst auf 0 und nach erfolgreicher if-Anweisung auf 1, oder erst auf 1 und nach erfolgreicher if-Anweisung auf 0 setze.
Aber ich danke für trotzdem für deine Hilfe und Mühe, die du investiert hast!!!
Grüße,
Ilona