今何歳かを求める関数を作ってみました。(ネタ元はこちら)
誕生日に関する計算はいろいろとあるようですが、「誕生日の前日をもって年齢を+1する」という条件で計算しています。
function Get-Age([DateTime]$Birthday, [DateTime]$Today = [DateTime]::Now) { #数え年を計算 $Year = $Today.Year - $Birthday.Year #今年の誕生日を計算(誕生日の前日を求める) $ThisBirthday = $Birthday.AddYears($Year).AddDays(-1) #今日が誕生日の前日より前なら数え年から1引く if ($Today -lt $ThisBirthday ) { $Year-=1 } return $Year }
最初にこの関数の使い方ですが
Get-Age "誕生日(YYYY/M/D)" ["基準日(YYYY/M/D)"]
のようにします。
たとえば
Get-Age "1972/6/19" "2009/10/20"
のように。
ここでいう基準日は、○月X日時点で何歳かを調べるための日付を意味します。
基準日は省略することができ、省略した場合は"今日"を指定したことになります。
さて、コードですが最初に誕生日から基準日までの数え年を計算します。
次に基準日の年の、誕生日を求めます。「誕生日の前日をもって年齢を+1する」という条件に基づき、AddDaysメソッドで-1しています。
そして、基準日が誕生日($ThisBirthday)よりも前なら、まだ誕生日が来ていないことになるので、数え年から1を引きます。
そうでない場合は、数え年が年齢となります。
コメント