トップ回答者
年齢をもとめる

質問
-
お世話になっております。
年齢を求める方法を考えており、次の方法で対応しようと思っていたのですが、うるう年じゃないときにひっかてしまい、
対策を考えております。下記のコマンドをみてご教授お願いします。
条件:誕生日の前日をもって年齢を+1する
ex.1/1生まれ ~12/31 = 1歳とする
閏年の場合
> ([datetime]((New-TimeSpan $([datetime]"1999/3/1") $([datetime]"2000/2/29")).ticks)).year -1
>1
閏年ではない場合
> ([datetime]((New-TimeSpan $([datetime]"2002/3/1") $([datetime]"2003/2/28")).ticks)).year -1
>0 0となってしまう。
ご教授お願いします。
回答
-
New-TimeSpanでどのようにして良いかわからず、下記のような関数を作ってみました。
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 "誕生日" "基準日"
として使用します。
たとえば
Get-Age "1999/3/1" "2000/2/29"
のように。
ここでいう基準日は、○月X日時点で何歳かを調べるための日付を意味します。
基準日は省略することができ、省略した場合は"今日"を指定したことになります。
この関数を使用して、
閏年の場合1999/3/1~2000/2/29を計算すると、1
閏年ではない場合2002/3/1~2003/2/28を計算すると、1
となります。
*誕生日の求め方はいろいろとあるようですが、ここでは「条件:誕生日の前日をもって年齢を+1する」に従って計算しています。
コードに関して、おかしな部分がありましたらご指摘願います- 編集済み HIROsDotNetMVP 2009年10月20日 8:46 文章追記
- 回答としてマーク TAKAKUN 2009年10月23日 6:22
すべての返信
-
New-TimeSpanでどのようにして良いかわからず、下記のような関数を作ってみました。
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 "誕生日" "基準日"
として使用します。
たとえば
Get-Age "1999/3/1" "2000/2/29"
のように。
ここでいう基準日は、○月X日時点で何歳かを調べるための日付を意味します。
基準日は省略することができ、省略した場合は"今日"を指定したことになります。
この関数を使用して、
閏年の場合1999/3/1~2000/2/29を計算すると、1
閏年ではない場合2002/3/1~2003/2/28を計算すると、1
となります。
*誕生日の求め方はいろいろとあるようですが、ここでは「条件:誕生日の前日をもって年齢を+1する」に従って計算しています。
コードに関して、おかしな部分がありましたらご指摘願います- 編集済み HIROsDotNetMVP 2009年10月20日 8:46 文章追記
- 回答としてマーク TAKAKUN 2009年10月23日 6:22