2009-07-11 2 views
12

Je cherche une fonction qui calcule des années à partir d'une date au format: 0000-00-00. Trouvé cette fonction, mais cela ne fonctionnera pas.Calculer des années à partir de date

// 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'); 
sorties

rien:/
j'ai erreur de rapports sur mais je n'obtenir des erreurs

+0

Cette fonction n'a pas de ligne 'return', par conséquent, il ne émet. Ça a l'air très incomplet. – deceze

Répondre

29

Votre code ne fonctionne pas car la fonction ne retourne rien à imprimer.

En ce qui concerne les algorithmes vont, que diriez-vous:

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 

Ceci est le même algorithme (juste en PHP) comme la réponse acceptée in this question.

Une courte façon de le faire:

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

doux! merci monsieur –

+0

vous pourriez aller plus loin et travailler sur la décimale des années ... – jsnfwlr

+0

Dans la deuxième façon de le faire, vous ne devriez pas modifier l'entrée $ alors. Vous devriez stocker ceci comme une variable séparée. – hawaiianchimp

2

Vous devez retourner Je pense que yearDiff $,.

6

Une autre façon de le faire est avec PHP de DateTime class qui est une nouveauté de PHP 5.2:

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

See it in action

+0

Petite correction: DateTime :: diff() est nouveau à partir de PHP 5.3 – turibe

1

Un seul la fonction de ligne peut fonctionner ici

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

Pour calculer l'âge

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