Formeln und Nachweise zur einfachen Berechnung des Alters ab dem Geburtsdatum
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}
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.
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'));
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.
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.
→ SQL-Datumsfunktion (Altersberechnung) | dbSheetClient IT-Technologie-Blog
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)
[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)
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.
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.
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 | |
---|---|
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" **.
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}
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
Recommended Posts