行年を月まで表示するために使った関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 |