i utilise toujours cette méthode testée:
/*
* @return int age (0 if both timestamps are equal or empty, -1 on invalid dates)
* 2009-03-12 ms
*/
function age($start = null, $end = null, $accuracy = 0) {
$age = 0;
if (empty($start) && empty($end) || $start == $end) {
return 0;
}
if (empty($start)) {
list($yearS, $monthS, $dayS) = explode('-', date(FORMAT_DB_DATE));
} else {
$startDate = $this->fromString($start);
$yearS = date('Y', $startDate);
$monthS = date('m', $startDate);
$dayS = date('d', $startDate);
if (!checkdate($monthS, $dayS, $yearS)) {
return -1;
}
}
if (empty($end)) {
list($yearE, $monthE, $dayE) = explode('-', date(FORMAT_DB_DATE));
} else {
$endDate = $this->fromString($end);
$yearE = date('Y', $endDate);
$monthE = date('m', $endDate);
$dayE = date('d', $endDate);
if (!checkdate($monthE, $dayE, $yearE)) {
return -1;
}
}
$n_tag = $dayE;
$n_monat = $monthE;
$n_jahr = $yearE;
$g_tag = $dayS;
$g_monat = $monthS;
$g_jahr = $yearS;
$g_date = mktime(0,0,0,$g_tag,$g_monat,$g_jahr);
if (($n_monat>$g_monat)||(($n_monat == $g_monat)&&($n_tag>$g_tag))||(($n_monat == $g_monat)&&($n_tag==$g_tag))) {
$age = $n_jahr-$g_jahr; // is correct if one already had his birthday this year
} else {
$age = $n_jahr-$g_jahr-1; // is correct if one didnt have his birthday yet in this year
}
return $age;
}
il peut probablement être refactured mais il fonctionne avec des années bissextiles et toutes sortes de choses. donc je jamais pris la peine ...
il utilise une constante vous n'avez
est juste: define ('FORMAT_DB_DATE', 'Y-m-d');
cela semble bon, mais im gettin une erreur SQL.voici mon code var $ virtualFields = array ( \t 'age' => "(YEAR (NOW() - YEAR (User.dob))" \t), et l'erreur est Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'AS 'User__age' FROM' users' AS' User' O WH 1 = 1 – iamjonesy
Il y avait une faute de frappe - nombre de parenthèses erronées :) Obtenez le code et essayez encore –
Cela ne fonctionne que si c'est actuellement après l'anniversaire de la personne cette année-là. Si l'anniversaire de l'utilisateur est en août et que vous l'exécutez en mars, il indiquera que l'utilisateur a un an de plus. – tyjkenn