行年を月まで表示するために使った関数
Public Shared Function GetElapsedYears(ByVal baseDay As DateTime, ByVal day As DateTime) As Integer
' 経過月数÷12(端数切り捨て)したものを経過年数とする
' (満12ヶ月で満1年とする)
Return GetElapsedMonths(baseDay, day) \ 12
End Function
Public Shared Function GetElapsedMonths(ByVal baseDay As DateTime, ByVal day As DateTime) As Integer
' 日付が基準日より前の場合は例外とする
If day < baseDay Then Throw New ArgumentException()
' 経過月数を求める(満月数を考慮しない単純計算)
Dim elapsedMonths As Integer = (day.Year - baseDay.Year) * 12 + (day.Month - baseDay.Month)
If baseDay.Day <= day.Day Then
' baseDayの日部分がdayの日部分以上の場合は、その月を満了しているとみなす
' (例:1月30日→3月30日以降の場合は満(3-1)ヶ月)
Return elapsedMonths
ElseIf day.Day = DateTime.DaysInMonth(day.Year, day.Month) AndAlso day.Day <= baseDay.Day Then
' baseDayの日部分がdayの表す月の末日以降の場合は、その月を満了しているとみなす
' (例:1月30日→2月28日(平年2月末日)/2月29日(閏年2月末日)以降の場合は満(2-1)ヶ月)
Return elapsedMonths
Else
' それ以外の場合は、その月を満了していないとみなす
' (例:1月30日→3月29日以前の場合は(3-1)ヶ月未満、よって満(3-1-1)ヶ月)
Return elapsedMonths - 1
End If
End Function
コメント