[PYTHON] Une formule qui calcule simplement l'âge à partir de la date de naissance

Une formule pour calculer simplement l'âge à partir de la date de naissance et sa preuve

une formule

Lorsque vous souhaitez trouver facilement l'âge de votre anniversaire À partir de la date d'aujourd'hui au format «aaaammjj», l'anniversaire également au format «aaaammjj» peut être soustrait tel quel, et la partie entière de la solution divisée par 10 000 peut être utilisée comme âge actuel.

Par exemple, si aujourd'hui est le 18 août 2017 et que votre anniversaire est le 20 août 1990,

\begin{align}
\mbox{âge}
&=floor\left(\frac{20170818-19900820}{10000}\right)\\
&=floor\left(\frac{269998}{10000}\right)\\
&=floor\left(26.9998\right)\\
&=26
\end{align}

Cela peut être généralisé à la formule suivante.

\begin{align}
\mbox{âge}
&=floor\left(\frac{\left(\mbox{Année actuelle}\times10000+\mbox{Mois en cours}\times100+\mbox{Date actuelle}\right)-\left(\mbox{Année de naissance}\times10000+\mbox{Mois de naissance}\times100+\mbox{anniversaire}\right)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }{10000}\right)
\end{align}

Exemple de calcul

Si nous sommes aujourd'hui le 18/08/2017 et que votre anniversaire est le 20/08/1990

\begin{align}
\text{âge}
&= floor\left(\frac{\left(2017\times1000+08\times100+18\right)-\left(1990\times1000+08\times100+20\right)}{10000}\right)\\
&= floor\left(\frac{20170818-19900820}{10000}\right)\\
&= floor\left(\frac{269998}{10000}\right)\\
&= floor\left(26.9998\right)\\
&= 26
\end{align}

Si aujourd'hui est le 20/08/2017 et que votre anniversaire est le 20/08/1990

\begin{align}
\text{âge}
&= floor\left(\frac{\left(2017\times1000+08\times100+20\right)-\left(1990\times1000+08\times100+20\right)}{10000}\right)\\
&=floor\left(\frac{20170820-19900820}{10000}\right)\\
&=floor\left(\frac{270000}{10000}\right)\\
&=floor\left(27\right)\\
&=27
\end{align}

Je veux juste faire quelque chose comme "corriger la milliseconde écoulée depuis l'heure UNIX ..." avec un réflexe spinal, mais quand je pense calmement, je pense que cette logique est une idée très naturelle.

(Pour ceux qui ne sont pas convaincus [** Expliquez un peu plus clairement ici **](#% E6% 95% B0% E5% BC% 8F% E3% 81% AE% E3% 82% 84% E3% 82% 84% E8% A9% B3% E3% 81% 97% E3% 81% 84% E8% A7% A3% E8% AA% AC))

Cependant, la définition de la formule de calcul de l'âge pouvant changer en fonction de la cible d'utilisation (notamment dans les relations juridiques), cette formule de calcul ne peut pas toujours être utilisée telle quelle.

code

Lors de l'utilisation de JavaScript

calcAge.js


/**
 *Une fonction qui renvoie l'âge à partir de l'anniversaire
 * @param {!string} birthdayStr -Entrez votre anniversaire au format aaaammjj
 * @return {number}Âge calculé
 **/
var calcAge = function(birthdayStr){
  if(isNaN(birthdayStr)||birthdayStr.length !== 8){
    return -1;
  }
  var d = new Date();
  var dStr = ''+d.getFullYear()+('0'+(d.getMonth()+1)).slice(-2)+('0'+d.getDate()).slice(-2);
  return Math.floor((parseInt(dStr)-parseInt(birthdayStr))/10000);
};

console.log(calcAge('19900820'));

Pour Python 3.X

calcAge.py


# -*- coding: utf-8 -*-
from datetime import datetime
import math

def calcAge(birthdayStr):
  if not (birthdayStr.isdigit() and len(birthdayStr)==8):
    return -1
  dStr = datetime.now().strftime("%Y%m%d")
  return math.floor((int(dStr)-int(birthdayStr))/10000)

print(calcAge("19900817"))

L'expression de «return» est

python


return (int(dStr)-int(birthdayStr))//10000

Mais d'accord.


En rubis

calcAge.rb


require "date"
def calcAge(birthdayStr)
  if birthdayStr !~ /^[0-9]{8}$/
    return -1
  end
  return (Date.today.strftime("%Y%m%d").to_i - birthdayStr.to_i) / 10000
end

print calcAge("19900820")

Dans Ruby, le traitement au sol n'est pas nécessaire car les fractions après la virgule décimale sont arbitrairement tronquées lors de la division entre les types entiers.


Lorsque SQL

Fonction de date SQL (calcul de l'âge) | Blog sur la technologie informatique dbSheetClient

Pour PHP, Java, Perl

Journal de l'administrateur du serveur de Yu Sano - Formule simple pour calculer l'âge à partir de la date de naissance: ITpro


Lors de l'utilisation d'Excel

Il existe une fonction DATEDIF () Cette formule n'est donc pas nécessaire, mais c'est un moyen efficace lorsque les données d'origine ne sont pas de type date lors de l'importation et du traitement du CSV.

=FLOOR.MATH((TEXT(TODAY(),"yyyymmdd")-[Date de naissance au format aaaammjj])/10000)

image.png

[Fonction FLOOR.MATH ()](https://support.office.com/ja-jp/article/FLOOR-MATH-%E9%96%A2%E6%95%B0-c302b599-fbdb-4177-ba19- 2c2b1249a2f5) ne peut pas être utilisé dans les anciens Excel. Dans ce cas, utilisez la fonction INT OK si vous l'utilisez.

=INT((TEXT(TODAY(),"yyyymmdd")-[Date de naissance au format aaaammjj])/10000)

Ilustration-Le moment où vous vieillissez

Cette formule calcule ** l'âge actuel **, mais ne calcule pas ** quel âge vous aurez aujourd'hui **. [Loi Niseki Suru pour le calcul de l'âge](https://ja.wikipedia.org/wiki/%E5%B9%B4%E9%BD%A2%E8%A8%88%E7%AE%97%E3%83% Selon 8B% E9% 96% A2% E3% 82% B9% E3% 83% AB% E6% B3% 95% E5% BE% 8B), ** le moment du vieillissement ** n'est pas le jour de l'anniversaire. ** Moment de la veille de l'anniversaire ** (= 24:00: 0 la veille). Autrement dit, une personne qui est ** née le 1er avril 2000 ** avait 5 ans au début du 31 mars 2006, mais aura 6 ans ** à la fin du 31 mars 2006 * * Le 1er avril 2006 sera célébré à l'âge de 6 ans **.

Selon cette définition, même les personnes nées le 29 février, Uru, vieillissent d'un an chaque année.

À propos de l'anniversaire et de la note

Selon la loi sur l'enseignement scolaire **, les personnes âgées de 6 ans à la veille du 1er avril ** doivent entrer à l'école primaire. «Les personnes nées le 1er avril 2000» ont ** 6 ans au 31 mars 2006, la veille du 1er avril 2006 **, donc ** 1er avril 2006 Devenu un premier niveleur ** de la journée Pour la même raison, «les personnes nées le 15 mars 2000» et les «personnes nées le 20 avril 1999» sont dans le même grade.

«Les personnes nées le 2 avril 2000» n'ont pas atteint l'âge de 6 ans la veille du 1er avril 2006, elles seront donc en première année du primaire à partir du 1er avril 2007, l'année suivante.


Une explication légèrement détaillée de la formule

Pour ceux qui veulent creuser un peu plus. Même des informations sur l'année de naissance et l'année en cours peuvent vous dire quel âge vous aurez cette année.

Âge de cette année = année de naissance en cours

Cependant, je ne connais pas "l'âge actuel" car je ne sais pas si l'anniversaire de cette année est venu. Si ** n'a pas atteint l'anniversaire de cette année **, alors ** "l'âge actuel" doit être calculé ** en soustrayant 1 $ de "l'âge de cette année".

Cela peut être exprimé par la ** formule spécifique au cas ** comme suit.

\begin{eqnarray}
\mbox{âge}=\left\{
\begin{array}{ll}
\mbox{Année actuelle}-\mbox{Année de naissance}&\left(\mbox{Date de naissance}\leq\mbox{Date actuelle}\right)\cdots\mbox{(1)Cérémonie après l'anniversaire de cette année}\\
\mbox{Année actuelle}-\mbox{Année de naissance}\color{red}{-1}&\left(\mbox{Date de naissance}>\mbox{Date actuelle}\right)\cdots\mbox{(2)Cérémonie jusqu'à la veille de l'anniversaire de cette année}\\
\end{array}
\right.
\end{eqnarray}

En transformant la formule simple pour l'âge, une formule similaire à la ** formule spécifique au cas ** ci-dessus peut être créée. La $ \ color {red} {partie de caractère rouge} $ de cette formule transformée contient le processus de "$ -1 $ si l'anniversaire de cette année n'est pas venu".

\begin{align}
\mbox{âge}
&=floor\left(\frac{\left(\mbox{Année actuelle}\times10000+\mbox{Mois en cours}\times100+\mbox{Date actuelle}\right)-\left(\mbox{Année de naissance}\times10000+\mbox{Mois de naissance}\times100+\mbox{anniversaire}\right)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }{10000}\right)\\
&=floor\left(\frac{\left(\mbox{Année actuelle}-\mbox{Année de naissance}\right)\times10000+\left(\mbox{Mois en cours}-\mbox{Mois de naissance}\right)\times100+\mbox{Date actuelle}-\mbox{anniversaire}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }{10000} \right)\\
&=\color{red}{floor}\left(\mbox{Année actuelle}-\mbox{Année de naissance}\color{red}{+\frac{\mbox{Mois en cours}-\mbox{Mois de naissance}}{100}+\frac{\mbox{Date actuelle}-\mbox{anniversaire}}{10000}}\right)\\
\end{align}

Le remplacement de la ** partie totale des résultats des calculs mensuels et journaliers ** de cette formule par $ X $ aboutit à une formule simple très similaire à la ** formule spécifique au cas ** qui apparaissait précédemment.

\begin{align}
\mbox{âge}&=\color{red}{floor}\left(\mbox{Année actuelle}-\mbox{Année de naissance}\color{red}{+X}\right)\\\\
\color{red}{X}&=\frac{\mbox{Mois en cours}-\mbox{Mois de naissance}}{100}+\frac{\mbox{Date actuelle}-\mbox{anniversaire}}{10000}\\\\\\
\end{align}

La plage que la valeur de $ X $ peut prendre est la suivante

--Quand aujourd'hui est le jour de votre anniversaire

→ Mois en cours = mois de naissance, date actuelle = anniversaire, donc 0 $

--Quand aujourd'hui est le 31 décembre et votre anniversaire est le 1er janvier

→ Valeur maximale $ X_ {max} $

\begin{align}
X_{max}&=\frac{\mbox{12}-\mbox{1}}{100}+\frac{\mbox{31}-\mbox{1}}{10000}=0.1130\\\\
\end{align}

--Quand aujourd'hui est le 1er janvier et votre anniversaire est le 31 décembre

→ Valeur minimale $ X_ {min} $

\begin{align}
X_{min}&=\frac{\mbox{1}-\mbox{12}}{100}+\frac{\mbox{1}-\mbox{31}}{10000}=-0.1130
\end{align}

Donc

-0.1130\leq X \leq 0.1130
Relation entre cadeau et anniversaire dans l'année XValeur possible de
\mbox{Date de naissance}\leq\mbox{Date actuelle}À (après l'anniversaire) 0\leq X_{after}\leq0.1130
\mbox{Date de naissance}>\mbox{Date actuelle}À (avant la veille de l'anniversaire) -0.1130\leq X_{before}<0

Calcul après le jour de l'anniversaire de cette année

Le résultat de "$ \ mbox {année courante} - \ mbox {année de naissance} $" est toujours un entier supérieur ou égal à $ 0 $, soit $ 0 \ leq X_ {après} \ leq 0,1130 $. $ X $ n'affecte pas le résultat du calcul et est ignoré.

\begin{align}
\mbox{âge}
&=floor\left(\mbox{Année actuelle}-\mbox{Année de naissance}\color{red}{+X_{after}}\right)\\
&=\mbox{Année actuelle}-\mbox{Année de naissance}
\end{align}

Ceci est conforme à la ** formule spécifique au cas "(1) Formule après l'anniversaire de cette année" **.

Calcul lorsque l'anniversaire de l'année n'est pas encore arrivé

Le résultat de "$ \ mbox {année courante} - \ mbox {année de naissance} $" est toujours un entier supérieur ou égal à $ 0 $, soit -0,1130 $ \ leq X_ {avant} <0 $. $ X $ a pour effet de soustraire 1 du résultat du calcul pour l'année.

\begin{align}
\mbox{âge}
&=floor\left(\mbox{Année actuelle}-\mbox{Année de naissance}\color{red}{+X_{before}}\right)\\
&=\mbox{Année actuelle}-\mbox{Année de naissance}\color{red}{-1}
\end{align}

Ceci est conforme à la ** formule spécifique au cas "formule (2) jusqu'à la veille de l'anniversaire de cette année" **.

Par conséquent, la formule

\begin{align}
\mbox{âge}
&=floor\left(\frac{\left(\mbox{Année actuelle}\times10000+\mbox{Mois en cours}\times100+\mbox{Date actuelle}\right)-\left(\mbox{Année de naissance}\times10000+\mbox{Mois de naissance}\times100+\mbox{anniversaire}\right)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }{10000}\right)
\end{align}

La solution de est la même que la formule suivante, et l'âge actuel peut être calculé à partir de l'anniversaire.

\begin{eqnarray}
\mbox{âge}=\left\{
\begin{array}{ll}
\mbox{Année actuelle}-\mbox{Année de naissance}&\left(\mbox{Date de naissance}\leq\mbox{Date actuelle}\right)\cdots\mbox{(1)Cérémonie après l'anniversaire de cette année}\\
\mbox{Année actuelle}-\mbox{Année de naissance}\color{red}{-1}&\left(\mbox{Date de naissance}>\mbox{Date actuelle}\right)\cdots\mbox{(2)Cérémonie jusqu'à la veille de l'anniversaire de cette année}\\
\end{array}
\right.
\end{eqnarray}

Épilogue

L'une des choses intéressantes à propos de la programmation est de savoir comment rendre le traitement effectué dans le cerveau ** concret et le mettre en logique simple **. Ce code est tout simplement très amusant, donc c'était amusant de le regarder.

Si vous êtes intéressé par le traitement des dates Excel, veuillez également vérifier ici. → [Excel] Identité des informations de date et d'heure --Qiita

Pour ceux qui veulent faire une inspection plus solide du format yyyymmddFormat Yyyyymmdd Vérification de la validité des chaînes de date Décodage des expressions régulières --Qiita

Lien de référence

Recommended Posts

Une formule qui calcule simplement l'âge à partir de la date de naissance
[Python] Obtenir la date de mise à jour d'un article d'actualité à partir de HTML
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
[Python] Un programme qui calcule le nombre de segments de chocolat qui remplissent les conditions
D'un livre qui apprend de manière intéressante la façon de penser du programmeur (Python)
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
L'histoire du lancement d'un serveur Minecraft depuis Discord
[Python] Un programme qui compte le nombre de vallées
Calculer le volume à partir de la structure bidimensionnelle d'un composé
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com
Créez un BOT qui raccourcit l'URL Discord
Points Python du point de vue d'un programmeur en langage C
Langage de programmation qui protège les gens de NHK
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
Je veux un bot Slack qui calcule et me dit le salaire d'un emploi à temps partiel à partir du calendrier de Google Agenda!
Générer cette forme du fond d'une bouteille pour animaux de compagnie
Une histoire qui a analysé la livraison de Nico Nama.
[Python] Un programme qui compare les positions des kangourous.
Une bibliothèque qui surveille la vie et la mort d'autres machines en envoyant un ping à partir de Python
Un exemple de mécanisme qui renvoie une prédiction par HTTP à partir du résultat de l'apprentissage automatique
Script Python qui peut vérifier l'état du serveur à partir du navigateur
Un outil qui transforme automatiquement le gacha de Soshage
Un programme qui supprime des caractères spécifiques du texte saisi
Différent du type d'importation de python. Signification de depuis A import B
L'histoire du champ de modèle Django disparaissant de la classe
Itérateur qui peut balayer vers l'avant à partir du milieu de la séquence
Créer un diagramme de corrélation à partir de l'historique des conversations de Twitter
Script Python qui compare le contenu de deux répertoires
Lors de l'incrémentation de la valeur d'une clé qui n'existe pas
pandas Récupère le nom d'une colonne contenant un caractère spécifique
Script Shell (Linux, macOS) qui affiche la date de la semaine dernière
À partir d'un livre que le programmeur peut apprendre ... (Python): trouver la valeur la plus fréquente
À partir d'un livre que les programmeurs peuvent apprendre ... (Python): examen des tableaux
Une fonction qui mesure le temps de traitement d'une méthode en python
L'histoire de la création d'un site qui répertorie les dates de sortie des livres
J'ai fait un bot mou qui m'informe de la température
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
L'histoire de la création d'un module qui ignore le courrier avec python
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
Meilleur 3 des impressions de la lecture du nouveau manuel de programmation shell
Une histoire sur la création d'un programme qui augmentera le nombre d'abonnés Instagram de 0 à 700 en une semaine
Existence du point de vue de Python
L'histoire de l'exportation d'un programme
Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
Extraire les lignes qui correspondent aux conditions d'un fichier texte avec python
Un programme qui récupère en douceur toute rubrique d'actualité
J'ai écrit un lecteur de corpus qui lit les résultats de l'analyse MeCab
L'histoire du développement d'une application WEB qui génère automatiquement des copies de capture [MeCab]
Comment créer un wrapper qui préserve la signature de la fonction à envelopper
J'ai fait une simple minuterie qui peut être démarrée depuis le terminal
Fonction Eval () qui calcule une chaîne de caractères comme expression en python
Une note sur les fonctions de la bibliothèque Linux standard qui gère le temps
L'histoire de la création d'un package qui accélère le fonctionnement de Juman (Juman ++) & KNP
Découvrez le nom de la méthode qui l'a appelée à partir de la méthode qui est python
Obtenez le salaire moyen d'un emploi avec des conditions spécifiées sur Indeed.com
[Python] Note: Fonction auto-conçue pour trouver la zone de distribution normale
Un simple serveur simulé qui incorpore simplement l'en-tête de la requête HTTP dans le corps de la réponse et le renvoie.
Création d'un bot Slack qui confirme et notifie à AWS Lambda la date d'expiration d'un certificat SSL