2009-07-11 14 views
12

Ich bin auf der Suche nach einer Funktion, die Jahre von einem Datum im Format: 0000-00-00 berechnet. Diese Funktion gefunden, funktioniert aber nicht.Berechne Jahre vom Datum

// Calculate the age from a given birth date 
// Example: GetAge("1986-06-18"); 
function getAge($Birthdate) 
{ 
    // Explode the date into meaningful variables 
    list($BirthYear,$BirthMonth,$BirthDay) = explode("-", $Birthdate); 
    // Find the differences 
    $YearDiff = date("Y") - $BirthYear; 
    $MonthDiff = date("m") - $BirthMonth; 
    $DayDiff = date("d") - $BirthDay; 
    // If the birthday has not occured this year 
    if ($DayDiff < 0 || $MonthDiff < 0) 
    $YearDiff--; 
} 

echo getAge('1990-04-04'); 

gibt nichts aus:/
ich habe Fehler Berichterstattung, aber i dont Fehler

+0

Diese Funktion hat keine 'return' Linie zu berechnen, daher spielt es keine Ausgabe nichts. Sieht sehr unvollständig aus. – deceze

Antwort

29

Ihr Code funktioniert nicht, da die Funktion nichts zum Drucken zurückgibt.

Was Algorithmen gehen, wie über dieses:

function getAge($then) { 
    $then_ts = strtotime($then); 
    $then_year = date('Y', $then_ts); 
    $age = date('Y') - $then_year; 
    if(strtotime('+' . $age . ' years', $then_ts) > time()) $age--; 
    return $age; 
} 
print getAge('1990-04-04'); // 19 
print getAge('1990-08-04'); // 18, birthday hasn't happened yet 

Dies ist der gleiche Algorithmus (nur in PHP) als akzeptierte Antwort in this question.

Ein kürzerer Weg, es zu tun:

function getAge($then) { 
    $then = date('Ymd', strtotime($then)); 
    $diff = date('Ymd') - $then; 
    return substr($diff, 0, -4); 
} 
+0

süß! danke sir –

+0

Sie könnten weiter gehen und die Dezimalstelle von Jahren erarbeiten ... – jsnfwlr

+0

In der zweiten Art, es zu tun, sollten Sie nicht die Eingabe $ dann ändern. Sie sollten dies als separate Variable speichern. – hawaiianchimp

2

Sie müssen yearDiff $ zurückkehren bekommen, denke ich.

6

Eine alternative Möglichkeit, dies zu tun, ist mit PHP DateTime class ist, die als von PHP 5.2 neu ist:

$birthdate = new DateTime("1986-06-18"); 
$today  = new DateTime(); 
$interval = $today->diff($birthdate); 
echo $interval->format('%y years'); 

See it in action

+0

Kleine Korrektur: DateTime :: diff() ist neu ab PHP 5.3 – turibe

1

Ein einzelne Linienfunktion kann hier arbeiten

function calculateAge($dob) { 
    return floor((time() - strtotime($dob))/31556926); 
} 

nach Alter

$age = calculateAge('1990-07-10');