[PYTHON] Eine Formel, die einfach das Alter ab dem Geburtsdatum berechnet

Formeln und Nachweise zur einfachen Berechnung des Alters ab dem Geburtsdatum

eine Formel

Wenn Sie das Alter von Ihrem Geburtstag leicht finden möchten Ab dem heutigen Datum im Format "JJJJMMTT" kann der Geburtstag auch im Format "JJJJMMTT" unverändert abgezogen werden, und der ganzzahlige Teil der Lösung geteilt durch 10.000 kann als aktuelles Alter verwendet werden.

Wenn heute beispielsweise der 18. August 2017 ist und Sie am 20. August 1990 Geburtstag haben,

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

Dies kann auf die folgende Formel verallgemeinert werden.

\begin{align}
\mbox{Alter}
&=floor\left(\frac{\left(\mbox{Laufendes Jahr}\times10000+\mbox{Aktueller Monat}\times100+\mbox{Aktuelles Datum}\right)-\left(\mbox{Geburtsjahr}\times10000+\mbox{Geburtsmonat}\times100+\mbox{Geburtstag}\right)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }{10000}\right)
\end{align}

Berechnungsbeispiel

Wenn heute der 18.08.2017 und Ihr Geburtstag der 20.08.2013 ist

\begin{align}
\text{Alter}
&= 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}

Wenn heute 2017/08/20 ist und Ihr Geburtstag 1990/08/20 ist

\begin{align}
\text{Alter}
&= 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}

Ich möchte nur so etwas wie "die verstrichene Millisekunde seit UNIX korrigieren ..." mit Wirbelsäulenreflex machen, aber wenn ich ruhig denke, denke ich, dass diese Logik eine sehr natürliche Idee ist.

(Für diejenigen, die nicht überzeugt sind [** Erklären Sie hier etwas klarer **](#% 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))

Da sich die Definition der Altersberechnungsformel jedoch je nach Verwendungsziel (insbesondere in Rechtsbeziehungen) ändern kann, kann diese Berechnungsformel nicht immer so verwendet werden, wie sie ist.

Code

Bei Verwendung von JavaScript

calcAge.js


/**
 *Eine Funktion, die das Alter vom Geburtstag zurückgibt
 * @param {!string} birthdayStr -Geben Sie Ihren Geburtstag im Format JJJJMTTT ein
 * @return {number}Berechnetes Alter
 **/
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'));

Für 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"))

Der Ausdruck für "return" ist

python


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

Aber ok.


In Ruby

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")

In Ruby ist keine Bodenverarbeitung erforderlich, da die Brüche nach dem Dezimalpunkt beim Teilen zwischen ganzzahligen Typen willkürlich abgeschnitten werden.


Wenn SQL

SQL-Datumsfunktion (Altersberechnung) | dbSheetClient IT-Technologie-Blog

Für PHP, Java, Perl

Yu Sanos Serveradministratortagebuch - Einfache Formel zur Berechnung des Alters ab dem Geburtsdatum: ITpro


In Excel

Es gibt die Funktion DATEDIF () Diese Formel ist also nicht erforderlich, aber ein wirksames Mittel, wenn die Originaldaten beim Importieren und Verarbeiten von CSV nicht vom Datumstyp sind.

=FLOOR.MATH((TEXT(TODAY(),"yyyymmdd")-[Geburtsdatum im Format JJJJMTT])/10000)

image.png

[FLOOR.MATH () -Funktion](https://support.office.com/ja-jp/article/FLOOR-MATH-%E9%96%A2%E6%95%B0-c302b599-fbdb-4177-ba19- 2c2b1249a2f5) kann in älterem Excel nicht verwendet werden. Verwenden Sie in diesem Fall die INT-Funktion. OK, wenn Sie es verwenden.

=INT((TEXT(TODAY(),"yyyymmdd")-[Geburtsdatum im Format JJJJMTT])/10000)

Illustration - In dem Moment, in dem du älter wirst

Diese Formel berechnet ** das aktuelle Alter **, berechnet jedoch nicht **, wie alt Sie heute sein werden **. [Altersberechnung Niseki Suru Law](https://ja.wikipedia.org/wiki/%E5%B9%B4%E9%BD%A2%E8%A8%88%E7%AE%97%E3%83% Laut 8B% E9% 96% A2% E3% 82% B9% E3% 83% AB% E6% B3% 95% E5% BE% 8B) ist ** der Zeitpunkt des Alterns ** nicht der Tag des Geburtstages. ** Der Moment am Tag vor dem Geburtstag läuft ab ** (= 24:00: 0 am Tag zuvor). Das heißt, eine Person, die am 1. April 2000 geboren wurde, war am 31. März 2006 5 Jahre alt, wird aber am Ende des 31. März 2006 6 Jahre alt sein. * Der 1. April 2006 wird im Alter von 6 Jahren gefeiert **.

Nach dieser Definition altert sogar eine am 29. Februar in Uru geborene Person jedes Jahr um ein Jahr.

Über Geburtstag und Klasse

Nach dem Schulbildungsgesetz müssen ** Personen, die am Tag vor dem 1. April ** 6 Jahre alt sind **, die Grundschule betreten. "Menschen, die am 1. April 2000 geboren wurden" sind am 31. März 2006, einen Tag vor dem 1. April 2006 **, also am 1. April 2006 ** 6 Jahre alt Wurde vom Tag an ein Erstklässler **. Aus dem gleichen Grund sind "am 15. März 2000 geborene Personen" und "am 20. April 1999 geborene Personen" in derselben Klasse.

"Menschen, die am 2. April 2000 geboren wurden" haben am Tag vor dem 1. April 2006 das Alter von 6 Jahren noch nicht erreicht. Sie werden daher ab dem 1. April 2007, dem folgenden Jahr, in der ersten Grundschule sein.


Eine leicht detaillierte Erklärung der Formel

Für diejenigen, die etwas tiefer graben wollen. Selbst Informationen zum Geburtsjahr und zum aktuellen Jahr können Ihnen sagen, wie alt Sie in diesem Jahr sein werden.

Das diesjährige Alter = aktuelles Geburtsjahr

Ich kenne jedoch kein "aktuelles Alter", da ich nicht weiß, ob der diesjährige Geburtstag gekommen ist. Wenn ** den diesjährigen Geburtstag nicht feiert **, muss ** "aktuelles Alter" berechnet werden **, indem $ 1 $ vom "diesjährigen Alter" abgezogen werden.

Dies kann durch die ** fallspezifische Formel ** wie folgt ausgedrückt werden.

\begin{eqnarray}
\mbox{Alter}=\left\{
\begin{array}{ll}
\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}&\left(\mbox{Geburtsdatum}\leq\mbox{Aktuelles Datum}\right)\cdots\mbox{(1)Zeremonie nach dem diesjährigen Geburtstag}\\
\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}\color{red}{-1}&\left(\mbox{Geburtsdatum}>\mbox{Aktuelles Datum}\right)\cdots\mbox{(2)Zeremonie bis zum Tag vor dem diesjährigen Geburtstag}\\
\end{array}
\right.
\end{eqnarray}

Durch Transformieren der einfachen Formel für das Alter kann eine Formel ähnlich der obigen ** fallspezifischen Formel ** erstellt werden. Das $ \ color {red} {red text} $ dieser transformierten Formel enthält den Prozess "$ -1 $, wenn der diesjährige Geburtstag nicht angekommen ist".

\begin{align}
\mbox{Alter}
&=floor\left(\frac{\left(\mbox{Laufendes Jahr}\times10000+\mbox{Aktueller Monat}\times100+\mbox{Aktuelles Datum}\right)-\left(\mbox{Geburtsjahr}\times10000+\mbox{Geburtsmonat}\times100+\mbox{Geburtstag}\right)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }{10000}\right)\\
&=floor\left(\frac{\left(\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}\right)\times10000+\left(\mbox{Aktueller Monat}-\mbox{Geburtsmonat}\right)\times100+\mbox{Aktuelles Datum}-\mbox{Geburtstag}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }{10000} \right)\\
&=\color{red}{floor}\left(\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}\color{red}{+\frac{\mbox{Aktueller Monat}-\mbox{Geburtsmonat}}{100}+\frac{\mbox{Aktuelles Datum}-\mbox{Geburtstag}}{10000}}\right)\\
\end{align}

Das Ersetzen des ** Gesamtteils der monatlichen und Tagesberechnungsergebnisse ** dieser Formel durch $ X $ führt zu einer einfachen Formel, die der zuvor angezeigten ** fallspezifischen Formel ** sehr ähnlich ist.

\begin{align}
\mbox{Alter}&=\color{red}{floor}\left(\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}\color{red}{+X}\right)\\\\
\color{red}{X}&=\frac{\mbox{Aktueller Monat}-\mbox{Geburtsmonat}}{100}+\frac{\mbox{Aktuelles Datum}-\mbox{Geburtstag}}{10000}\\\\\\
\end{align}

Der Bereich, den der Wert von $ X $ annehmen kann, ist wie folgt

→ Aktueller Monat = Geburtsmonat, aktuelles Datum = Geburtstag, also $ 0 $

→ Maximalwert $ X_ {max} $

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

→ Mindestwert $ X_ {min} $

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

Deshalb

-0.1130\leq X \leq 0.1130
Beziehung zwischen Geschenk und Geburtstag innerhalb des Jahres XMöglicher Wert von
\mbox{Geburtsdatum}\leq\mbox{Aktuelles Datum}Um (nach dem Geburtstag) 0\leq X_{after}\leq0.1130
\mbox{Geburtsdatum}>\mbox{Aktuelles Datum}Um (vor dem Tag vor dem Geburtstag) -0.1130\leq X_{before}<0

Berechnung nach dem Tag des diesjährigen Geburtstages

Das Ergebnis von "$ \ mbox {aktuelles Jahr} - \ mbox {Geburtsjahr} $" ist immer eine Ganzzahl größer oder gleich $ 0 $, was $ 0 \ leq X_ {after} \ leq 0.1130 $ ist. $ X $ hat keinen Einfluss auf das Berechnungsergebnis und wird ignoriert.

\begin{align}
\mbox{Alter}
&=floor\left(\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}\color{red}{+X_{after}}\right)\\
&=\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}
\end{align}

Dies steht im Einklang mit der ** fallspezifischen Formel "(1) Formel nach dem diesjährigen Geburtstag" **.

Berechnung, wann der Geburtstag des Jahres noch nicht gekommen ist

Das Ergebnis von "$ \ mbox {aktuelles Jahr} - \ mbox {Geburtsjahr} $" ist immer eine Ganzzahl größer oder gleich $ 0 $, was $ -0,1130 \ leq X_ {vor} <0 $ ist. $ X $ bewirkt, dass 1 vom Berechnungsergebnis für das Jahr abgezogen wird.

\begin{align}
\mbox{Alter}
&=floor\left(\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}\color{red}{+X_{before}}\right)\\
&=\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}\color{red}{-1}
\end{align}

Dies steht im Einklang mit der ** fallspezifischen Formel "(2) Formel bis zum Tag vor dem diesjährigen Geburtstag" **.

Daher die Formel

\begin{align}
\mbox{Alter}
&=floor\left(\frac{\left(\mbox{Laufendes Jahr}\times10000+\mbox{Aktueller Monat}\times100+\mbox{Aktuelles Datum}\right)-\left(\mbox{Geburtsjahr}\times10000+\mbox{Geburtsmonat}\times100+\mbox{Geburtstag}\right)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }{10000}\right)
\end{align}

Die Lösung von entspricht der folgenden Formel, und das aktuelle Alter kann ab dem Geburtstag berechnet werden.

\begin{eqnarray}
\mbox{Alter}=\left\{
\begin{array}{ll}
\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}&\left(\mbox{Geburtsdatum}\leq\mbox{Aktuelles Datum}\right)\cdots\mbox{(1)Zeremonie nach dem diesjährigen Geburtstag}\\
\mbox{Laufendes Jahr}-\mbox{Geburtsjahr}\color{red}{-1}&\left(\mbox{Geburtsdatum}>\mbox{Aktuelles Datum}\right)\cdots\mbox{(2)Zeremonie bis zum Tag vor dem diesjährigen Geburtstag}\\
\end{array}
\right.
\end{eqnarray}

Nachwort

Eines der interessanten Dinge beim Programmieren ist, wie man die im Gehirn durchgeführte Verarbeitung ** konkretisiert und in einfache Logik ** umsetzt. Dieser Code ist einfach voller Spaß, also hat es Spaß gemacht, ihn nur anzusehen.

Wenn Sie an der Verarbeitung von Excel-Daten interessiert sind, überprüfen Sie dies bitte auch hier. → [Excel] Identität von Datums- und Uhrzeitinformationen - Qiita

Für diejenigen, die das Format "JJJJMMTT" genauer untersuchen möchten → Yyyyymmdd-Format Überprüfen der Gültigkeit von Datumszeichenfolgen Entschlüsseln regulärer Ausdrücke --Qiita

Referenzlink

Recommended Posts

Eine Formel, die einfach das Alter ab dem Geburtsdatum berechnet
[Python] Ruft das Aktualisierungsdatum eines Nachrichtenartikels aus HTML ab
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
[Python] Ein Programm, das die Anzahl der Schokoladensegmente berechnet, die die Bedingungen erfüllen
Aus einem Buch, das die Denkweise des Programmierers interessanterweise gelernt hat (Python)
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
Die Geschichte des Starts eines Minecraft-Servers von Discord
[Python] Ein Programm, das die Anzahl der Täler zählt
Berechnen Sie das Volumen aus der zweidimensionalen Struktur einer Verbindung
Ein Python-Skript, das die Anzahl der Jobs für eine bestimmte Bedingung von Indeed.com abruft
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
Programmiersprache, die die Menschen vor NHK schützt
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
Ich möchte einen Slack-Bot, der das Gehalt eines Teilzeitjobs aus dem Zeitplan von Google Kalender berechnet und anzeigt!
Erzeugen Sie diese Form des Bodens einer Haustierflasche
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Eine Bibliothek, die Leben und Tod anderer Maschinen durch Ping von Python aus überwacht
Ein Beispiel für einen Mechanismus, der eine Vorhersage von HTTP aus dem Ergebnis des maschinellen Lernens zurückgibt
Python-Skript, das den Status des Servers über den Browser überprüfen kann
Ein Werkzeug, das die Gacha von Soshage automatisch dreht
Ein Programm, das bestimmte Zeichen aus dem eingegebenen Text entfernt
Anders als der Importtyp von Python. Bedeutung von aus A Import B.
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
Iterator, der von der Mitte der Sequenz aus vorwärts scannen kann
Erstellen Sie ein Korrelationsdiagramm aus dem Konversationsverlauf von Twitter
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Beim Inkrementieren des Werts eines Schlüssels, der nicht vorhanden ist
pandas Ruft den Namen einer Spalte ab, die ein bestimmtes Zeichen enthält
Shell-Skript (Linux, macOS), das das Datum der letzten Woche ausgibt
Aus einem Buch, das der Programmierer lernen kann ... (Python): Finden Sie den häufigsten Wert
Aus einem Buch, das Programmierer lernen können ... (Python): Überprüfung von Arrays
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Die Geschichte der Erstellung einer Website, auf der die Veröffentlichungsdaten von Büchern aufgeführt sind
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Beste 3 aus den Eindrücken des Lesens des neuen Shell-Programmierlehrbuchs
Eine Geschichte über das Erstellen eines Programms, mit dem die Anzahl der Instagram-Follower in einer Woche von 0 auf 700 erhöht wird
Existenz aus Sicht von Python
Die Geschichte des Exportierens eines Programms
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Extrahieren Sie mit Python Zeilen, die den Bedingungen entsprechen, aus einer Textdatei
Ein Programm, das alle Nachrichtenüberschriften sanft wiederherstellt
Ich habe einen Korpusleser geschrieben, der die Ergebnisse der MeCab-Analyse liest
Die Geschichte der Entwicklung einer WEB-Anwendung, die automatisch Fangkopien generiert [MeCab]
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
Die eval () -Funktion, die eine Zeichenfolge als Ausdruck in Python berechnet
Ein Hinweis zu den Funktionen der Standard-Linux-Bibliothek, die sich mit Zeit befasst
Die Geschichte, ein Paket zu erstellen, das den Betrieb von Juman (Juman ++) & KNP beschleunigt
Den Namen der Methode, die ihn aufgerufen hat, finden Sie in der Python-Methode
Holen Sie sich das durchschnittliche Gehalt eines Jobs mit bestimmten Bedingungen von Indeed.com
[Python] Hinweis: Selbst erstellte Funktion zum Ermitteln des Bereichs der Normalverteilung
Ein einfacher Mock-Server, der den HTTP-Anforderungsheader einfach in den Hauptteil der Antwort einbettet und zurückgibt.
Erstellt einen Slack-Bot, der AWS Lambda über das Ablaufdatum eines SSL-Zertifikats bestätigt und benachrichtigt