compute age from given birthdate

时光总嘲笑我的痴心妄想 提交于 2019-12-21 20:44:21

问题


I have 2 comboboxes and 2 textboxes. My first combobox contains months in this format january, february, etc, and the other combobox contains numbers from 1 to 31. My first textbox is txtyear. Once the user input birth year to txtyear a variable BOD will be equals to this.

Dim BOD as string
BOD = cbomonth.text + "-" + cboday.text + "-" + txtyear.text

The purpose of my last textbox is to handle the age of the user that will be computed when the cursor lost focus on txtyear.

Can anyone help how to compute the age.


回答1:


There are really two questions here:

  1. How to convert the string input into a DateTime object
  2. How to calculate age once you have your data in the correct format.

I'll let you follow other's instructions for how use TryParseExtract which is definitely the correct way to go here.

When determining someone's age from their DOB, try using this:

Public Function GetCurrentAge(ByVal dob As Date) As Integer
    Dim age As Integer
    age = Today.Year - dob.Year
    If (dob > Today.AddYears(-age)) Then age -= 1
    Return age
End Function

It is the vb version of the top answers on Jeff Atwood's very popular question How do I calculate someone's age

I wrote a blogpost about calculating age from dob as well.




回答2:


Here's a little different way using the year and month properties of the Date class:

Dim BOD as string
BOD = cbomonth.text + "-" + cboday.text + "-" + txtyear.text

Dim dt As Date
If Date.TryParseExact(BOD, "MMMM-dd-yyyy", Nothing, Globalization.DateTimeStyles.None, dt) Then
    Dim Age As New Date(Now.Subtract(dt).Ticks)
    MsgBox(String.Format("Your age is : {0} Years and {1} Months", Age.Year - 1, Age.Month - 1))

Else
    MsgBox("Birth Date is in wrong format")
End If



回答3:


Here's a technique when you use Visual Studio 2012 VB.NET language

Private Sub dtpBOfD_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpBOfD.ValueChanged

        lblAge.Text = Age(dtpBOfD.Value)

    End Sub

    Public Shared Function Age(DOfB As Object) As String
        If (Month(Date.Today) * 100) + Date.Today.Day >= (Month(DOfB) * 100) + DOfB.Day Then
            Return DateDiff(DateInterval.Year, DOfB, Date.Today)
        Else
            Return DateDiff(DateInterval.Year, DOfB, Date.Today) - 1
        End If
    End Function



回答4:


Use this function

Function String2Date(ByVal sDay As String, ByVal sMonth as String, ByVal sYear as String) As Date
   StdDateString = sMonth & " " & sDay & ", " & sYear
End Function

And apply it ..

Dim dt1 as Date = String2Date(ComboBox2.Text,ComboBox1.Text,txtYear.Text).ToShortDateString
Dim dt2 as Date = Now.ToShortDateString
Dim dt3 as TimeSpan = (dt2 - dt1)
Dim diff as Double = dt3.Days
Dim sAge as String

sAge = Str(Int(diff / 365)) & " Year "
diff = diff Mod 365
sAge = sAge & Str(Int(diff / 30)) & " Month(s)"
diff = diff Mod 30
sAge = sAge & Str(diff) & " Day(s)"

txtAge.Text = sAge



回答5:


for complete age information use this code in c#.`

public string calculateDays(int day, int Month, int year)
    {           
       int Diffyear;
       int DiffMonth;
       int DiffDay;
       int cuYear=DateTime.Now.Year;
       int cuMonth=DateTime.Now.Month;
       int cuDay=DateTime.Now.Day;
       string Age;
        Diffyear= cuYear-year;
        DiffMonth=cuMonth-Month;
        DiffDay=cuDay-day;
        if ((DiffMonth) < 0)
    {
        Diffyear -= 1;
    }
        if ((DiffDay) < 0)
        {
            DiffMonth -= 1;
            if ((cuMonth - 1) < 8)
            {
                if (((cuMonth - 1) % 2) == 0)
                {
                    if ((cuMonth - 1) == 2)
                        if (cuYear % 4 == 0)
                        {
                            DiffDay = 29 + DiffDay;
                        }
                        else
                        {
                            DiffDay = 28 + DiffDay;
                        }
                    else
                        DiffDay = 30 + DiffDay;
                }


                else

                    DiffDay = 31 + DiffDay;
            }
            else
            {
                if (((cuMonth - 1) % 2) == 0)
                {
                    DiffDay = 31 + DiffDay;
                }
                else
                {
                    DiffDay = 30 + DiffDay;
                }
            }
        }
        if ((DiffMonth) < 0)
        {
            DiffMonth = DiffMonth+12;
        }
        if (Diffyear < 0)
        {
            Diffyear = Diffyear * (-1);
        }
        if ((DiffDay) < 0)
        {
            DiffDay = DiffDay * (-1);
        }

       Age = "Age: " + Diffyear.ToString() + " year, " + DiffMonth.ToString() + " months, " + DiffDay.ToString() + " days";
        return Age;
    }

`




回答6:


Dim d1 As Date

Dim d2 As Date

d1 = Format(dob.Value, "yyyy/MM/dd"

d2 = Format(System.DateTime.Now, "yyyy/MM/dd")

d = DateDiff(DateInterval.Year, d1, d2)'d-1 provides accurate age



来源:https://stackoverflow.com/questions/16874911/compute-age-from-given-birthdate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!