玄関へお回り下さい。
満年齢と月数・日数を取得及び干支を取得 (4個)            (SNo.083)

1.満年齢と月数・日数を求める(満5歳4ヶ月と15日のように)
2.指定期間内のトータル月数を取得
3.指定年の干支を求める
4.満年齢だけを求める
使用コントロール Button1 〜 Button4  TextBox1 TextBox2
その他条件 WindowsXP(Vista) Visual Basic 2005(VB2008)
 
1.満年齢と月数・日数を取得(満5歳4ヶ月と15日のように)
 
Private Function fDateDiff_YYMMDD(ByVal birthday As Date, _
                                  ByVal toDay As DateAs String
    Dim bYY, bMM, bDD As Integer, myDay As DateTime
    '期間の月数を求める
  '  bMM = DateDiff("m", birthday, toDay)

    'DateDiff 関数を使用しないで取得すると(期間内のトータルの月数を求める)
    bYY = (CInt(toDay.Year) - CInt(birthday.Year)) * 12
    bMM = (CInt(toDay.Month) - CInt(birthday.Month)) + bYY
    '比較日以前だったら
    If birthday.Day > toDay.Day Then
        '月数を1ヶ月引く
        bMM = bMM - 1
        Dim dt As System.DateTime = toDay
        dt = dt.AddMonths(-1)
        '前月の末日を求める
        bDD = System.DateTime.DaysInMonth(toDay.Year, dt.Month)
        '末日までの日数を求める
        bDD = bDD - birthday.Day
        '当月の日数をプラスする
        bDD = bDD + toDay.Day 
'1ヶ月未満の日数を求める
    Else
        bDD = toDay.Day - birthday.Day '1ヶ月未満の日数を求める
    End If
    bYY = bMM \ 12      '年数を求める
    bMM = bMM Mod 12    '月数を求める
    Return bYY & "年" & bMM & "月" & bDD & "日"
End Function

'使用例
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
    Dim strBday As String
    strBday = fDateDiff_YYMMDD(CDate(TextBox1.Text), CDate(TextBox2.Text))
    MessageBox.Show("満年齢は " & strBday & " です。")
End Sub
 
2.指定期間内のトータル月数を取得
 
Private Sub Button3_Click(ByVal sender As System.Object, _
                         
ByVal e As System.EventArgs) Handles Button3.Click
'期間の月数を求める(2005/10 - 2001/12 で計算され日は考慮されない)
   
Dim dt1 As DateTime = "2001/12/10"
   
Dim dt2 As DateTime = "2005/10/06"

    Debug.WriteLine(Microsoft.VisualBasic.DateDiff("m", dt1, dt2)) 
'結果  46

    '上記の代わりを Framework の機能で実現すると
   
Dim dYY As Integer = (CInt(dt2.Year) - CInt(dt1.Year)) * 12
   
Dim dMM As Integer = (CInt(dt2.Month) - CInt(dt1.Month)) + dYY
    Debug.WriteLine(dMM)   
'結果  46

    '指定期間内の満のトータル月数を求める関数の実行例
    Debug.WriteLine(fTotalMonths(DateTime.Parse("2005/10/06"), _
                                 DateTime.Parse("2001/12/10")))     
'結果  45
End Sub


Private Function fTotalMonths(ByVal newDate As Date, _
                             
ByVal oldDate As DateAs Integer
'指定期間内の満のトータル月数を求める関数
    '期間内の年数を求め、それを月数に換算する。
   
Dim dYY As Integer = (CInt(newDate.Year) - CInt(oldDate.Year)) * 12
    '年内の月数の差を求め、上記月数に加算(減算)する。
    fTotalMonths = (
CInt(newDate.Month) - CInt(oldDate.Month)) + dYY
    '比較日以前なら月数を1ヶ月マイナスする。
   
If newDate.Day < oldDate.Day Then
        fTotalMonths -= 1
   
End If
   
Return fTotalMonths
End Function

3.指定年の干支を求める
 
Private Sub Button2_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button2.Click
'指定年の干支を求める
    Dim eto As String = "申酉戌亥子丑寅卯辰巳午未"
    eto = eto.Substring((CDate(TextBox1.Text).Year Mod 12), 1)
    Debug.WriteLine(eto)
End Sub
 
4.満年齢だけを求める
 
Private Sub Button4_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button4.Click
'満年齢だけを求める
    '指定期間内の満のトータル年数を求める関数
    Debug.WriteLine(fTotalYears(CDate("2005/12/9"), CDate("2001/12/10")))  '結果  3 '結果  45
End Sub

Private Function fTotalYears(ByVal newDate As Date, _
                             ByVal oldDate As DateAs Integer
'指定期間内の満のトータル年数を求める関数
    '期間内の年数を求める。
    fTotalYears = CInt(newDate.Year) - CInt(oldDate.Year)
    '同じ年の月日(年をどちらかのデータに合せる)を作成
    Dim dt As New DateTime(oldDate.Year, newDate.Month, newDate.Day)
    If oldDate > dt Then    '指定月日が誕生月日以前どうかを調査
        fTotalYears -= 1    '誕生月日以前なら1年マイナスする
    End If
    Return fTotalYears
End Function






2005/10/07


VBレスキュー(花ちゃん)
VB.NET2003  VB2005