Altersberechnung

Hei alle,
ich oute mich als erstes als Laie, bin aber bei einer Programmierung über diesen "Schnippsel" gestolpert.
Dieser Code soll mir das Geburtsdatum, das der Nutzer einträgt: z.B. 01.10.1938 umrechnen und mit "18 Jahren" überprüfen, da er erst ab 18 Jahren bei uns anmieten darf (kein Schmuddelkram ;-)
Aber das Alter wird mit diesem Code falsch berechnet. Wo ist der Fehler?

if ($_POST['vname'] != '') {
if ($_POST['nname'] != '') {
if ($_POST['geb1'] != '' && $_POST['geb2'] != '' && $_POST['geb3'] != '' && is_numeric($_POST['geb1']) && is_numeric($_POST['geb2']) && is_numeric($_POST['geb3']) && $_POST['geb3'] <= date("Y")) {
if ($_POST['geb1'] <= '31' && $_POST['geb2'] <= '12' && strlen($_POST['geb3']) == '4') {
$seconds_since_birth = mktime(0,0,0,$_POST['geb2'],$_POST['geb1'],$_POST['geb3']);
$today = time();

$age = $today - $seconds_since_birth;
$age_in_years = date("Y",$age) - 1970;

if ($age_in_years >= 18) {
$FahrerInfo = TRUE;
} else {
$errFahrerinfo = 'Mit '.$age_in_years.' Jahren sind Sie leider nicht berech.....


Könnt Ihr mir bitte weiterhelfen?
Herzlichen Dank

Klaus
 
Hi!

Versuch es mal hiermit:
PHP:
<?php
$geb = "27.03.1985"; 

$gebArr = explode(".",$geb); 
$secUntilGeb = mktime(0,0,0,$gebArr[1],$gebArr[0],$gebArr[2]); 
$heute = time(); 

$alter = date("Y",$heute - $secUntilGeb) - 1970; 
if($alter < 18) {
	echo "Mit ".$alter." Jahren sind Sie leider nicht berech.....";
}
else {
	echo "Sie sind berechtigt!";
}
?>


Viele Grüße,
Jacka
 
Hey Jacka,

herzlichen Dank für Deine Hilfe. Allerdings sind die von mir angegebenen Felder, in die der Kunde sein Geburtsdatum eingibt, schon so vorgegeben.
Kann man die nicht in Deine Codierung irgendwie mit übernehmen, damit ich nicht die gesamte Seite/Felder umbenennen muss?

Merci nochmals und bis bald

Ciaoo
Klaus :confused:
 
Dann füge das doch aus deinen Feldern zusammen;)
PHP:
<?php
$gebArr[0] = $_POST['geb1'];
$gebArr[1] = $_POST['geb2'];
$gebArr[2] = $_POST['geb3']; 

$gebArr = explode(".",$geb); 
$secUntilGeb = mktime(0,0,0,$gebArr[1],$gebArr[0],$gebArr[2]); 
$heute = time(); 

$alter = date("Y",$heute - $secUntilGeb) - 1970; 
if($alter < 18) {
    echo "Mit ".$alter." Jahren sind Sie leider nicht berech.....";
}
else {
    echo "Sie sind berechtigt!";
}
?>

Und fertig
 
Dann würde ich folgende Zeile aber löschen:
Code:
$gebArr = explode(".",$geb);

Sonst zerschießt du dir dein Array wieder ;)

lg
 
Hallo,
lieben Dank. Aber verzeiht mir meine Unwissenheit. Mir zerschießt es trotz aller Bemühungen die Seite.
Die gesamte Seite heißt z.B. mit dem neuen Code so:

if ($_POST['bestellen_x_x'] != '') {
////// I N F O
if ($_POST['vname'] != '') {
if ($_POST['nname'] != '') {
if ($_POST['geb1'] != '' && $_POST['geb2'] != '' && $_POST['geb3'] != '' && is_numeric($_POST['geb1']) && is_numeric($_POST['geb2']) && is_numeric($_POST['geb3']) && $_POST['geb3'] <= date("Y")) {
if ($_POST['geb1'] <= '31' && $_POST['geb2'] <= '12' && strlen($_POST['geb3']) == '4') {
$seconds_since_birth = mktime(0,0,0,$_POST['geb2'],$_POST['geb1'],$_POST['geb3']);
$today = time();

$gebArr[0] = $_POST['geb1'];
$gebArr[1] = $_POST['geb2'];
$gebArr[2] = $_POST['geb3'];
$secUntilGeb = mktime(0,0,0,$gebArr[1],$gebArr[0],$gebArr[2]);
$heute = time();
$alter = date("Y",$heute - $secUntilGeb) - 1970;
if($alter < 18) {
echo "Mit ".$alter." Jahren sind Sie leider nicht berech.....";
}
else {
echo "Sie sind berechtigt!";
}
} else {
$errinfo = 'Datumsformat falsch. (DD.MM.JJJJ) z.B.: 22.10.1983.';
}
} else {
$errinfo = 'Bitte &uuml;berpr&uuml;fen Sie Ihr Geburtsdatum (TT.MM.JJJJ).';
}

Könnt Ihr sehen, wo der Hund begraben liegt?
Ich danke Euch
lg
Klaus
 
Bitte bau den PHP Code in einen [php ] Container, damit es leichter zu lesen ist und formatiere deinen Code doch bitte auch etwas.
Es ist nicht angenehm zuerst suchen zu müssen wo eine Klammer aufhört und wo eine anfängt.

Ich denke dein problem liegt hier:
PHP:
$alter = date("Y",$heute - $secUntilGeb) - 1970;

Viel zu kompliziert meiner Meinung nach.
Wieso machst du es nicht einfach mit dem Timestamp ?
Mit dem kannst du super rechnen

PHP:
$seconds18 = 3600 * 24 * 365 * 18;

Das ist zwar nicht sooo genau, aber nicht so umständlich.

Ansonsten, wenn du es mit date machen willst, dann würde ich dir empfehlen einfach einmal das Jahr des Geburtsdatums mit dem heutigen jahr zu vergleichen ;)
 
Zurück