2013-08-22 131 views
0

如何在18歲以下的人顯示錯誤消息?我用下面的代碼,但它始終顯示,年齡是無效的,即使我輸入的日期早於1995年驗證年齡未滿18歲

DateTime dt = DateTime.Parse(dob_main.Text); 
DateTime dt_now = DateTime.Now; 

DateTime dt_18 = dt.AddYears(-18); 

if (dt.Date >= dt_18.Date) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 
+0

'的DateTime dt_18 = dt.AddYears(-18); if(dt.Date> = dt_18.Date)' - 這總是如此。你需要'var age = DateTime.Now.Year - dt.Year;如果(年齡<18)...' –

回答

5
DateTime bday = DateTime.Parse(dob_main.Text); 
DateTime today = DateTime.Today; 
int age = today.Year - bday.Year; 
if(age < 18) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 
7

你應該嘗試沿着東西:

var age = GetAge(dt); 
if(age < 18) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 

int GetAge(DateTime bornDate) 
{ 
    DateTime today = DateTime.Today; 
    int age = today.Year - bornDate.Year; 
    if (bornDate > today.AddYears(-age)) 
     age--; 

    return age; 
} 

Offtopic注意:考慮以這種方式命名變量,SO用戶可以通過閱讀它來猜測變量的意圖。 dtdob_maindt_18遠離好名字。

2
DateTime dt = DateTime.Parse(dob_main.Text); 
DateTime dt_now = DateTime.Now; 

DateTime dt_18 = dt.AddYears(18); //here add years, not subtract 

if (dt_18.Date >= dt_now.Date) //here you want to compare dt_now 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 
0

簡單使用這種方式

DateTime BirthDate = DateTime.Parse(dob_main.Text); 
DateTime CurrentDate = DateTime.Today; 
int Age = CurrentDate.Year - BirthDate.Year; 
if(Age < 18) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
}