Geschrieben von lucas9991 am 04.12.2005, 20:51

Hiho,

mir ist mal aufgefallen, das die meisten Scripts zum Alter errechnen gar nicht mit Jahreszahlen niedriger als 1970 (auf meinem Windowas Server) funktionieren.
Also hier ein kleines Script, das abhilfe schafft.


function cyCase_age ( $birthdate ) {
$dif = 0;
$parts = explode ( '.', $birthdate );
if ( $parts[2] < 1970 ) {
$dif = 1970 - $parts[2];
$parts[2] = $parts[2] + $dif;
}
$seconds = mktime ( 0, 0, 0, $parts[1], $parts[0], $parts[2] );
$seconds = time () - $seconds;
$age = date ( 'Y', $seconds ) - 1970 + $dif;
return ( $age );
}

Also zuerst wird halt die Funktion deklariert.
function cyCase_age ( $birthdate ) {
Über printf ( 'lucas9991 ist %s Jahre alt', cyCase_age ( '18.05.****' ) ); kann man somit mein Alter ausgeben lassen.
Aber dazu fehlt noch der Rest des Codes.
$dif = 0;
Dies dient legendlich dafür, dass kein Hinweis erscheint, wenn das Datum größer als 1970 ist.
$parts = explode ( '.', $birthdate );
Dies splittet den übergeben String (bzw. das Datum) in die einzelnen Teile.
$parts[0] enthält jetzt den Tag, $parts[1] enthält den Monat und $parts[2] das Jahr.
if ( $parts[2] < 1970 ) {
$dif = 1970 - $parts[2];
$parts[2] = $parts[2] + $dif;
}

Wenn das Jahr kleiner als 1970 ist, dann würde die Funktion "mktime ()" beim Aufruf einen Fehler erzeugen. Deshalb fangen wir diese Fehlerquelle ab.
Wenn also das Jahr kleiner als 1970 ist, dann wird die Differenz errechnet und zwischengespeichert.
Dann wird die Differenz mit dem Jahr addiert (dies ergibt dann immer 1970).

$seconds = mktime ( 0, 0, 0, $parts[1], $parts[0], $parts[2] );
$seconds = time () - $seconds;

Die Sekunden die seit 1970 bis zum Geburtstdatum vergangen sind werden errechnet.
$age = date ( 'Y', $seconds ) - 1970 + $dif;
Zum Jahr werden 1970 Jahre abgezogen und die Differenz wirder addiert.
Zum Schluss kommt das Alter raus. ;-)
Jetzt funktioniert einerseits folnder Aufruf :
printf ( 'lucas9991 ist %s Jahre alt.', cyCase_age ( '18.05.****' ) );
, als auch
printf ( 'lucas9991s Opa ist %s Jahre alt bzw. er wäre so alt.', cyCase_age ( '18.05.1912' ) );

MfG Lucas

Bewertung Anzahl
6
70,0 %
7 Bewertungen
5
20,0 %
2 Bewertungen
2
10,0 %
1 Bewertungen