[Tips]今何歳?

今何歳かを求める関数を作ってみました。(ネタ元はこちら

誕生日に関する計算はいろいろとあるようですが、「誕生日の前日をもって年齢を+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を引きます。

そうでない場合は、数え年が年齢となります。

コメント

タイトルとURLをコピーしました