01-11-16, 08:07 PM
01-11-16, 11:44 PM
السلام عليكم ،،
هذا كود كتبته قبل فتره طويله و لا اعلم هل نتائجه مضمونه 100% دائما او لا ،، لكنه يفي بالغرض ، على العموم الـ function تسمح لك بالحساب الميلادي و الهجري فقط قم بتحديد نوع الكاليندر أما ميلادي أو أم القرى و الكود مشروح ، لا اعتقد انه سيكون صعب عليك فهمه :
و اذا احد من الاخوه لديه تعديل أو ملاحظه أو تحسين لعملية الحساب أن يضعه هنا
هذا كود كتبته قبل فتره طويله و لا اعلم هل نتائجه مضمونه 100% دائما او لا ،، لكنه يفي بالغرض ، على العموم الـ function تسمح لك بالحساب الميلادي و الهجري فقط قم بتحديد نوع الكاليندر أما ميلادي أو أم القرى و الكود مشروح ، لا اعتقد انه سيكون صعب عليك فهمه :
كود :
''' <summary>
''' نوع الكاليندر المستخدم في الحساب
''' </summary>
''' <remarks></remarks>
Enum CalenderType
Gregorian = 1
UmAlQura = 0
End Enum
''' <summary>
''' حساب العمر
''' </summary>
''' <param name="birthdate">تاريخ الميلاد</param>
''' <param name="oCalenderType">حساب العمر بالهجري او الميلادي</param>
''' <param name="onlyReturnYear">ارجاع فقط السنة</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function calculateAge(ByVal birthdate As DateTime, Optional ByVal oCalenderType As CalenderType = CalenderType.Gregorian, Optional ByVal onlyReturnYear As Boolean = True, Optional ByVal showFullTextAsEn As Boolean = False) As String
Dim cultureCalendar As Object
If oCalenderType = CalenderType.Gregorian Then
cultureCalendar = New System.Globalization.UmAlQuraCalendar
Else
cultureCalendar = New System.Globalization.GregorianCalendar
End If
Dim birthDay As Integer = 0
Dim birthMonth As Integer = 0
Dim birthYear As Integer = 0
birthDay = cultureCalendar.GetDayOfMonth(Now) - cultureCalendar.GetDayOfMonth(birthdate)
birthMonth = cultureCalendar.GetMonth(Now) - cultureCalendar.GetMonth(birthdate)
birthYear = cultureCalendar.GetYear(Now) - cultureCalendar.GetYear(birthdate)
If birthDay < 0 Then
birthDay = 30 + birthDay
birthMonth = birthMonth - 1
End If
If birthMonth < 0 Then
birthMonth = birthMonth + 12
birthYear = birthYear - 1
End If
Dim birthFull As String = ""
If onlyReturnYear = True Then
birthFull = birthYear.ToString
Else
If showFullTextAsEn = True Then
birthFull = String.Format("{0} years , {1} months , {2} days", birthYear.ToString, birthMonth.ToString, birthDay.ToString) ' (birthDay.ToString + "/" + birthMonth.ToString + "/" + )
Else
birthFull = String.Format("{0} سنة و {1} أشهر و {2} أيام.", birthYear.ToString, birthMonth.ToString, birthDay.ToString) ' (birthDay.ToString + "/" + birthMonth.ToString + "/" + )
End If
End If
Return birthFull
End Function
و اذا احد من الاخوه لديه تعديل أو ملاحظه أو تحسين لعملية الحساب أن يضعه هنا
02-11-16, 12:28 AM
02-11-16, 06:04 PM
myalsailamy
جميل علي
شكراا لكم جزاكم الله خير
جميل علي
شكراا لكم جزاكم الله خير
02-11-16, 10:21 PM
لا اعلم ان كانت تجربتي فاشلة ام لسوء حظ
فالتاريخ الهجري لا يكون دقيقا في مثل هذه الاحوال
وحتى في الميلادي فالامر يحتاج للانتباه للسنوات الكبيسة
فالتاريخ الهجري لا يكون دقيقا في مثل هذه الاحوال
PHP كود :
Dim dob As DateTime
dob = New DateTime(DateTimePicker1.Value.Year, DateTimePicker1.Value.Month, DateTimePicker1.Value.Day)
Dim tday As TimeSpan = DateTime.Now.Subtract(dob)
Dim years As Integer, months As Integer, days As Integer
months = 12 * (DateTime.Now.Year - dob.Year) + (DateTime.Now.Month - dob.Month)
If DateTime.Now.Day < dob.Day Then
months -= 1
days = DateTime.DaysInMonth(dob.Year, dob.Month) - dob.Day + DateTime.Now.Day
Else
days = DateTime.Now.Day - dob.Day
End If
years = Math.Floor(months / 12)
months -= years * 12
MsgBox("Your age as on " & Format(Now, "dd-MMM-yyyy") & vbCrLf & years & " Years, " & months & " Months and " & days & " Days")
13-04-17, 12:17 AM
شكراا لكم جزاكم الله خير