満年齢と月数・日数を取得及び干支を取得 (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 Date) As 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 Date) As 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 Date) As 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 |