Skip to content

Wie berechne ich das Alter an einem bestimmten Datum im Format Jahre, Monate, Tage?

Lösung:

Ich nahm die Idee von Percusse und sprang sozusagen in den Kaninchenbau. Es berücksichtigt jedoch sicherlich keine gregorianischen / julianischen Manipulationen und vor allem wird ein Sternchen nach dem Tag gedruckt, an dem es erforderlich ist annehmen der Monat hat 30 Tage.

Aber seien wir ehrlich, das Format von Jahren, Monaten und Tagen ist von Natur aus mehrdeutig. Man kann mir sicherlich sagen, wie viele Tage es vom 24. April bis zum 23. Mai hat, aber ich behaupte, Sie können mir nicht sagen, wie viele Monate und Tage es vom 24. März bis 23. Mai sind. Es kommt darauf an, ob ich den Monat vom 24. März bis zum 24. April zähle und dann die restlichen Tage zähle gegen Zählen Sie den Monat als 23. April bis 23. Mai und zählen Sie dann die verbleibenden Tage.

documentclass{article}
usepackage{listofitems}
newcommandgetage[1]{%
  setsepchar[,]{/}%
  readliststarting{#1}%
  edefagedays{thenumexprtheday-starting[1]relax}%
  edefagemonths{thenumexprthemonth-starting[2]relax}%
  edefageyears{thenumexprtheyear-starting[3]relax}%
  ifnumagedays<0relax
    edefagemonths{thenumexpragemonths-1relax}%
    edefagedays{thenumexpragedays+30relax*}%
  fi
  ifnumagemonths<0relax
    edefageyears{thenumexprageyears-1relax}%
    edefagemonths{thenumexpragemonths+12relax}%
  fi
  From #1 to theday/themonth/theyear{} is
  ageyears{} years, agemonths{} months, and agedays{} days.%
}

begin{document}
getage{10/02/1989}

getage{10/07/1989}

getage{23/07/1989}

getage{24/07/1989}
end{document}

Bildbeschreibung hier eingeben

Hier gehe ich noch einen Schritt weiter und berechne Tage, angenommen, ich zähle Tage ab dem letzten Monat vor dem Enddatum. Beachten Sie, dass dies, wenn Sie so wollen, definiert, wie Monate + Tage gezählt werden. So vermeidet es Mehrdeutigkeiten nur per Definition. Und es berücksichtigt immer noch keine Schaltjahre, und daher jede Berechnung, die im März eines Schaltjahres endet, für das der Start day überschreitet das Ende day wird um 1 Tag ausfallen. BEARBEITET, um Berechnungen mit einem Trailing zu kennzeichnen dag welcher können dem Schaltjahrfehler unterliegen.

REEDITED, um die Angabe des Enddatums als optionales Argument zu ermöglichen (Standard today).

documentclass{article}
usepackage{listofitems}
newcommandgetage[2][relax]{bgroup%
  setsepchar[,]{/}%
  ifxrelax#1relaxelse
    readlistending{#1}%
    day=ending[1]relax%
    month=ending[2]relax%
    year=ending[3]relax%
  fi%
  readliststarting{#2}%
  xdefagedays{thenumexprtheday-starting[1]relax}%
  xdefagemonths{thenumexprthemonth-starting[2]relax}%
  xdefageyears{thenumexprtheyear-starting[3]relax}%
  ifnumagedays<0relax
    monthlength{themonth}%
    xdefagemonths{thenumexpragemonths-1relax}%
    xdefagedays{thenumexpragedays+themonthlengthrelax}%
  fi
  ifnumagemonths<0relax
    xdefageyears{thenumexprageyears-1relax}%
    xdefagemonths{thenumexpragemonths+12relax}%
  fi
  From #2 to theday/themonth/theyear{} is
  ageyears{} years, agemonths{} months, and agedays{} days%
  ifnummonth=3relaxifnumstarting[1]>dayrelax$^{dag}$fifi.%
egroup}
newcommandmonthlength[1]{%
  edefthemonthlength{%
% PRIOR MONTH:    DEC  JAN  FEB  MAR  APR  MAY  JUN  JUL  AUG  SEP  OCT  NOV  
    ifcase#1 xxor31or31or28or31or30or31or30or31or31or30or31or30fi%
  }%
}
begin{document}
getage{10/02/1989}par
getage{10/07/1989}par
getage{23/07/1989}par
getage{24/07/1989}par
getage{24/04/2017}par
getage{24/03/2017}par
getage[23/3/2017]{24/02/2017}par
getage[23/11/2017]{24/10/2017}par
getage[01/05/2017]{10/02/1989}
end{document}

Bildbeschreibung hier eingeben

Ich kann Ihnen die Anzahl der Tage nennen, aber ich gehe nicht in den Kaninchenbau hinein, in dem ich in Jahre, Monate, Tage umrechnen muss, je nachdem, wann und wo dies geschieht.

BEARBEITEN: Lokale Änderungssachen, nur um Paketautoren nicht wütend zu machen ...

documentclass{article}
usepackage{pgfkeys,pgfcalendar}

makeatletter    
defmydatediff#1{%
begingroup%
pgfcalendardatetojulian{#1}{@tempcnta}%
pgfcalendardatetojulian{year-month-day}{@tempcntb}%
advance@tempcntb-@tempcntarelax%
expandafteraftergroupthe@tempcntb%
endgroup%
}
begin{document}
mydatediff{2007-01-14}... 
end{document}
Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.