今何歳かを求める関数を作ってみました。(ネタ元はこちら)
誕生日に関する計算はいろいろとあるようですが、「誕生日の前日をもって年齢を+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を引きます。
そうでない場合は、数え年が年齢となります。

コメント