Comment puis-je calculer un âge en années, étant donné une date de naissance au format AAAAMMJJ? Est-il possible d'utiliser la Date()
fonction?
Je recherche une meilleure solution que celle que j'utilise actuellement:
var dob = '19800810';
var year = Number(dob.substr(0, 4));
var month = Number(dob.substr(4, 2)) - 1;
var day = Number(dob.substr(6, 2));
var today = new Date();
var age = today.getFullYear() - year;
if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day)) {
age--;
}
alert(age);
javascript
date
Francisc
la source
la source
Date
objet devrait faire s'il l'encapsulait. Les gens pouvaient écrire des livres sur la succion de laDate
manipulation de JS . ... Si vous pouvez vivre avec parfois un jour d'arrêt, alors l'approximation:AgeInYears = Math.floor ( (now_Date - DOB_Date) / 31556952000 )
est à peu près aussi simple que possible.Réponses:
J'irais pour la lisibilité:
Avis de non-responsabilité: cela pose également des problèmes de précision, de sorte que cela ne peut pas être complètement approuvé non plus. Il peut être désactivé de quelques heures, de certaines années ou pendant l'heure d'été (selon le fuseau horaire).
Au lieu de cela, je recommanderais d'utiliser une bibliothèque pour cela, si la précision est très importante. En outre
@Naveens post
, c'est probablement le plus précis, car il ne dépend pas de l'heure de la journée.Repères: http://jsperf.com/birthday-calculation/15
la source
Essaye ça.
Je crois que la seule chose qui semblait grossière sur votre code était la
substr
partie.Violon : http://jsfiddle.net/codeandcloud/n33RJ/
la source
Important: Cette réponse ne fournit pas une réponse précise à 100%, elle est éteinte d'environ 10 à 20 heures selon la date.
Bien sûr, je n'ai pas pu résister à l'envie de relever le défi et de créer une calculatrice d'anniversaire plus rapide et plus courte que la solution actuellement acceptée. Le point principal de ma solution est que les mathématiques sont rapides, donc au lieu d'utiliser la ramification, et le modèle de date javascript fournit pour calculer une solution, nous utilisons les mathématiques merveilleuses
La réponse ressemble à ceci, et s'exécute ~ 65% plus rapidement que celle de Naveen, plus elle est beaucoup plus courte:
Le nombre magique: 31557600000 est 24 * 3600 * 365,25 * 1000 qui est la longueur d'une année, la longueur d'une année est de 365 jours et 6 heures qui est de 0,25 jour. Au final, je donne le résultat qui nous donne l'âge final.
Voici les repères: http://jsperf.com/birthday-calculation
Pour prendre en charge le format de données OP, vous pouvez remplacer
+new Date(dateString);
par
+new Date(d.substr(0, 4), d.substr(4, 2)-1, d.substr(6, 2));
Si vous pouvez trouver une meilleure solution, partagez-la! :-)
la source
dateString
argument juste pour le constructeur Date () pour l'analyser correctement. Par exemple, en prenant leYYYYMMDD
format que j'ai donné dans la question, cela échouera.Avec momentjs:
la source
Solution nettoyante à un revêtement avec ES6:
J'utilise une année de 365,25 jours (0,25 en raison des années bissextiles) qui sont respectivement de 3,15576e + 10 millisecondes (365,25 * 24 * 60 * 60 * 1000).
la source
const yearInMs = 3.15576e+10 // Using a year of 365.25 days (because leap years)
Il y a quelque temps, j'ai créé une fonction dans ce but:
Il prend un objet Date en entrée, vous devez donc analyser la
'YYYYMMDD'
chaîne de date formatée:la source
birthDate
est le 5 janvier 1980 et que la date actuelle est le 4 janvier 2005 , la fonction affichera par erreurage
25 ... La valeur correcte est 24.Voici ma solution, passez simplement une date analysable:
la source
Solution alternative, car pourquoi pas:
la source
la source
Pour tester si l'anniversaire est déjà passé ou non, je définis une fonction d'aide
Date.prototype.getDoY
, qui renvoie effectivement le numéro de jour de l'année. Le reste est assez explicite.la source
Je pense que cela pourrait être simplement comme ça:
Fonctionne également avec un horodatage
la source
J'ai juste eu à écrire cette fonction pour moi - la réponse acceptée est assez bonne mais l'OMI pourrait utiliser un peu de nettoyage. Cela prend un horodatage Unix pour dob parce que c'était mon exigence mais pourrait être rapidement adapté pour utiliser une chaîne:
Notez que j'ai utilisé une valeur plate de 31 dans ma fonction MeasureDays. Tout ce qui compte, c'est que le «jour de l'année» soit une mesure monotone augmentant l'horodatage.
Si vous utilisez un horodatage ou une chaîne javascript, vous souhaiterez évidemment supprimer le facteur 1000.
la source
Pour obtenir l'âge auquel la date européenne est entrée:
la source
Une autre solution possible avec moment.js :
la source
J'ai vérifié les exemples montrés auparavant et ils n'ont pas fonctionné dans tous les cas, et à cause de cela j'ai créé mon propre script. J'ai testé cela, et cela fonctionne parfaitement.
la source
C'est la manière la plus élégante pour moi:
la source
Obtenez l'âge (années, mois et jours) à partir de la date de naissance avec javascript
Fonction calcularEdad (années, mois et jours)
Fonction esNumero
la source
Fonctionne parfaitement pour moi, les gars.
la source
Je sais que c'est un fil très ancien mais je voulais mettre dans cette implémentation que j'ai écrite pour trouver l'âge qui je crois est beaucoup plus précis.
Bien sûr, vous pouvez l'adapter à d'autres formats d'obtention des paramètres. J'espère que cela aidera quelqu'un à la recherche d'une meilleure solution.
la source
J'ai utilisé cette approche en utilisant la logique au lieu des mathématiques. C'est précis et rapide. Les paramètres sont l'année, le mois et le jour de l'anniversaire de la personne. Il renvoie l'âge de la personne sous forme d'entier.
la source
En adoptant les publications de Naveen et de l'OP d'origine, je me suis retrouvé avec un stub de méthode réutilisable qui accepte à la fois des chaînes et / ou des objets JS Date.
Je l'ai nommé
gregorianAge()
parce que ce calcul donne exactement comment nous dénotons l'âge en utilisant le calendrier grégorien. c'est-à-dire sans compter l'année de fin si le mois et le jour précèdent le mois et le jour de l'année de naissance.la source
Deux autres options:
la source
J'ai fait une mise à jour d'une réponse précédente.
J'espère que ça aide: D
la source
voici un moyen simple de calculer l'âge:
la source
la source
Vous pouvez l'utiliser pour la restriction d'âge dans votre formulaire -
la source
Je suis un peu trop tard mais j'ai trouvé que c'était le moyen le plus simple de calculer une date de naissance.
La balise HTML:
J'espère que cela vous aidera.
la source
Voici la solution la plus simple et la plus précise que j'ai pu trouver:
Et voici un échantillon qui tiendra compte du 29 février au 28 février de chaque année.
Cela fonctionne même avec un âge négatif!
la source
Encore une autre solution:
la source
Avec la méthode momentjs "fromNow", cela vous permet de travailler avec une date formatée, c'est-à-dire: 15/03/1968
var dob = document.getElementByID("dob"); var age = moment(dob.value).fromNow(true).replace(" years", "");
//fromNow(true) => suffix "ago" is not displayed //but we still have to get rid of "years";
En version prototype
}
la source