Salut, j'ai une petite question concernant le calcule d'âge en PHP.
En fait, j'enregistre la date de mes user, exemple : 02/02/1992 donc l'user à 24 ans et donc mon but c'est de calculer combien d'user ont 24 ans dans ma DB afin de les afficher dans un graphique.
Je réfléchis à de multiples solutions, mais elles me paraissent toutes compliquées si vous avez une petite idée comment je peux m'y prendre ça peut être cool :)
Merci
Bonjour donny,
En ce qui me concerne je ferais ceci:
Au niveau de ma page un select (ou autre) pour choisir un age exemple: 24
J'enverrai ce '24' comme paramètre à une méthode de classe.
Cette méthode aurait une instruction qui soustrairais 24 à l'année en cours 2016, cela donne 2016 - 24 = 1992.
Je ferais une requête paramètrée en demandant de compter le nombre d'utilisateur dans ma table qui à une date de naissance dont l'année est 1992.
La reqête te renverrai le nombre d'users né en 1992.
C'est une approche simple.
Bonne journée.
TOUT simplement :
"SELECT users FROM table WHERE annee = 1992"
Tu remplaces 1992 par la variable qui affiche les années.
3 secondes de recherche google :
SELECT TIMESTAMPDIFF( YEAR, '1970-02-01', CURDATE( ) ) AS age;
donc un
SELECT TIMESTAMPDIFF( YEAR, date_naissance, CURDATE( ) ) AS age FROM users WHERE age = 24;
devrait fonctionner
Salut,
d'après son exemple,
il semble qu'il stock l'âge des utilisateurs en une chaine de caractères de la forme "jj/mm/aaaa",
du coup je ne pense pas que les solutions proposées puissent fonctionner.
Après je m'y connais tellement mal dans la "lecture" des date en SQL que je me trompe peut-être.
Pour faire ça je modifierai la structure de la base de données.
Comme je m'y connais mal dans la "lecture" des date en SQL, j'aurai besoin de 2 champs de type "varchar" :
Mais je suis sur qu'on peut tout faire avec juste un champ de type "date" si on s'y connait mieux que moi. ^^
Maintenant qu'on a cette BDD,
Je ne suis pas sur d'avoir compris ce que tu veux faire,
j'ai cru comprendre que tu as un "user" en paramètre,
et tu veux connaitre tous les "users" du même âge.
Si c'est bien ça,
je ferai une première fonction pour savoir si l'anniversaire du "user" en paramètre est passé ou non.
(s'il est né en 2000, et qu'on est en 2016, il peut avoir, soit 15 ans soit 16 ans).
Dans ton code, on admet qu'on a un objet $user, avec les 2 attributs correspondant aux 2 champs de la BDD que j'ai cité.
function gotBirthday($user)
{
if ($user->get('birthday') < date('md'))
{
return = false;
}
return true;
}
ensuite on appel une fonction qui va récupérer les "user" en BDD qui sont nés la même année que le "user" en paramètre, ET qui ont leur anniversaire passé (ou non).
function getAllUsersSameAge($user)
{
$chevron = '<';
if (gotBirthday($user))
{
$chevron = '>=';
}
// je n'écris pas tout. Et puis il faudrait faire une requête préparée aussi
$results = 'SELECT * FROM users
WHERE year = ' . $user->get("year") . '
AND birthday ' . $chevron . ' ' . date('md');
return $results;
}
$all_users_same_age = getAllUsersSameAge($user);
Je rappel que je n'y comprends rien aux dates SQL, alors je sais qu'il y a forcément moyen de faire plus simple que ça.
Si quelqu'un veut bien proposer une solution, j'en serai ravi. ^^