Je cherche un moyen de calculer l'âge d'une personne, compte tenu de sa date de naissance au format jj / mm / aaaa.
J'utilisais la fonction suivante qui fonctionnait bien pendant plusieurs mois jusqu'à ce qu'une sorte de pépin empêche la boucle while de ne jamais se terminer et arrête tout le site. Comme il y a près de 100 000 DOB qui utilisent cette fonction plusieurs fois par jour, il est difficile de déterminer ce qui en était la cause.
Quelqu'un a-t-il un moyen plus fiable de calculer l'âge?
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));
$tdate = time();
$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
++$age;
}
return $age;
EDIT: cette fonction semble fonctionner correctement de temps en temps, mais renvoie "40" pour une date de naissance du 14/09/1986
return floor((time() - strtotime($birthdayDate))/31556926);
mktime()
. il semble que php a mal calculé lestrtotime()
avec ce format.strtotime
comprend parfaitement les formats de date, vous n'avez pas à vous inquiéter:Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
php.net/manual/en/function.strtotime.phpDepuis PHP 5.3.0, vous pouvez utiliser le handy
DateTime::createFromFormat
pour vous assurer que votre date ne soit pas confondue avec lem/d/Y
format et laDateInterval
classe (viaDateTime::diff
) pour obtenir le nombre d'années entre maintenant et la date cible.la source
la source
J'utilise la date / heure pour cela:
la source
Méthode simple pour calculer l'âge à partir de dob:
31556926
est le nombre de secondes par an.la source
$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
// Calculateur d'âge
la source
Je trouve que cela fonctionne et c'est simple.
Soustraire de 1970 car strtotime calcule le temps à partir du 01/01/1970 ( http://php.net/manual/en/function.strtotime.php )
Résultats:
la source
Si vous souhaitez calculer l'âge d'utilisation du dob, vous pouvez également utiliser cette fonction. Il utilise l'objet DateTime.
la source
Je pensais que je jetterais ceci ici car cela semble être la forme la plus populaire de cette question.
J'ai effectué une comparaison de 100 ans sur 3 des types de fonctions d'âge les plus populaires que j'ai pu trouver pour PHP et j'ai publié mes résultats (ainsi que les fonctions) sur mon blog .
Comme vous pouvez le voir là - bas , les 3 funcs préforme bien avec juste une légère différence sur la 2ème fonction. Ma suggestion basée sur mes résultats est d'utiliser la 3ème fonction à moins que vous ne souhaitiez faire quelque chose de spécifique le jour de l'anniversaire d'une personne, auquel cas la 1ère fonction fournit un moyen simple de faire exactement cela.
Mes suggestions après mon bilan de 100 ans:
Si vous voulez quelque chose de plus allongé pour pouvoir inclure des occasions comme les anniversaires et autres:
Mais si vous voulez simplement connaître l'âge et rien de plus, alors:
Voir BLOG
Une note clé sur la
strtotime
méthode:la source
Vous pouvez utiliser la
Carbon
bibliothèque , qui est une extension d'API pour DateTime.Vous pouvez:
ou:
la source
age
, qui fait undiffInYears
. Vous pouvez donc écrire:(new \Carbon\Carbon($date))->age
Si vous n'avez pas besoin d'une grande précision, juste du nombre d'années, vous pouvez envisager d'utiliser le code ci-dessous ...
Il vous suffit de le mettre dans une fonction et de remplacer la date "1971-11-20" par une variable.
Veuillez noter que la précision du code ci-dessus n'est pas élevée à cause des années bissextiles, c'est-à-dire que tous les 4 ans environ, les jours sont 366 au lieu de 365. L'expression 60 * 60 * 24 * 365 calcule le nombre de secondes dans une année - vous pouvez remplacez-le par 31536000.
Une autre chose importante est qu'en raison de l'utilisation d' UNIX horodatage il présente à la fois le problème de l'année 1901 et de l'année 2038, ce qui signifie que l'expression ci-dessus ne fonctionnera pas correctement pour les dates avant l'année 1901 et après l'année 2038.
Si vous pouvez vivre avec les limitations mentionnées ci-dessus, ce code devrait fonctionner pour vous.
la source
la source
la source
J'ai trouvé ce script fiable. Il prend le format de date AAAA-mm-jj, mais il pourrait être modifié assez facilement pour d'autres formats.
la source
la source
i18n:
la source
Essayez l'un de ceux-ci en utilisant l'objet DateTime
Référence http://www.calculator.net/age-calculator.html
la source
Écrivez un script PHP pour calculer l'âge actuel d'une personne.
Exemple de date de naissance: 11.4.1987
Exemple de solution:
Code PHP:
Exemple de sortie:
Votre âge: 30 ans, 3 mois, 0 jour
la source
c'est ma fonction pour calculer DOB avec le retour spécifique de l'âge par année, mois et jour
voici comment l'utiliser
la source
Cette fonction renverra l'âge en années. La valeur d'entrée est une chaîne de jour de naissance formatée par date (AAAA-MM-JJ), par exemple: 2000-01-01
Cela fonctionne avec le jour - précision
Salut, nira
la source
Si vous n'arrivez pas à utiliser certaines des nouvelles fonctions, voici quelque chose que j'ai fouetté. Probablement plus que ce dont vous avez besoin, et je suis sûr qu'il existe de meilleures façons, mais c'est facile à lire, donc cela devrait faire le travail:
Exemple d'utilisation:
J'espère que cela t'aides.
la source
En raison de l'année bissextile, il n'est pas sage de soustraire simplement une date d'une autre et de l'étaler au nombre d'années. Pour calculer l'âge comme les humains, vous aurez besoin de quelque chose comme ceci:
la source
Ce qui suit fonctionne très bien pour moi et semble être beaucoup plus simple que les exemples qui ont déjà été donnés.
J'ai testé et utilisé activement ce code, cela peut sembler un peu encombrant mais il est très simple à utiliser et à éditer et est assez précis.
la source
En suivant la première logique, vous devez utiliser = dans la comparaison.
la source
C'est un problème lorsque vous utilisez strtotime avec JJ / MM / AAAA. Vous ne pouvez pas utiliser ce format. Au lieu de cela, vous pouvez utiliser MM / JJ / AAAA (ou bien d'autres comme AAAAMMJJ ou AAAA-MM-JJ) et cela devrait fonctionner correctement.
la source
Que diriez-vous de lancer cette requête et de laisser MySQL la calculer pour vous:
Résultat:
L'utilisateur a 27 ans et 6 mois (il compte un mois entier)
la source
Je l'ai fait comme ça.
la source
La meilleure réponse à cela est OK, mais seulement calualtes l'année de naissance d'une personne, je l'ai ajustée à mes propres fins pour calculer le jour et le mois. Mais j'ai pensé que cela valait la peine d'être partagé.
Cela fonctionne en prenant un horodatage de la date de naissance des utilisateurs, mais n'hésitez pas à changer cela
la source
Si vous ne voulez atteindre votre âge que l'âge, il existe un moyen très simple de le faire. traiter les dates au format «AAAAMMJJ» comme des nombres et les soustraire. Après cela, annulez la partie MMDD en divisant le résultat par 10000 et réduisez-le. Simple et n'échoue jamais, prend même en compte les leapyears et l'heure actuelle de votre serveur;)
Depuis birthays ou principalement fournis par des dates complètes sur le lieu de naissance et ils sont pertinents pour L'HEURE LOCALE ACTUELLE (où la vérification de l'âge est effectivement effectuée).
donc si vous voulez vérifier si quelqu'un a 18 ou 21 ans ou moins de 100 sur votre fuseau horaire (sans oublier le fuseau horaire d'origine) par anniversaire, c'est ma façon de le faire
la source
Essaye ça :
la source