ご質問はお気軽に

沙羅の英語版(クラウド仕様)

Line
Support
Remote
Support
English
Version
最近の記事
日本版
シンサラ
開発メモなど

行年を月まで表示するために使った関数

行年を月まで表示するために使った関数

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

コメント

この記事へのコメントはありません。

関連記事

PAGE TOP