18-08-19, 11:33 PM (آخر تعديل لهذه المشاركة : 18-08-19, 11:39 PM {2} بواسطة ابراهيم ايبو.)
السلام عليكم
تفضل اخي
كود :
Dim HijriDTF As New System.Globalization.CultureInfo("ar-SA", False)
Dim newDays As DateTime = DateTime.Now.ToString("dd MM yyyy", HijriDTF)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Txt_DaysA.Text = DateTime.Now.ToString("dd", HijriDTF)
'TxtMonthsA.Text = DateTime.Now.ToString("MM", HijriDTF)
'Txt_YearsA.Text = DateTime.Now.ToString("yyyy", HijriDTF)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Birtday As Date = CDate(Txt_BirtDay.Text & "/" & Txt_BirtManth.Text & "/" & Txt_BirtYear.Text)
newDays As Date = CDate(Txt_DaysA.Text & "/" & TxtMonthsA.Text & "/" & Txt_YearsA.Text)
Dim strall As String = (GetDateSpanText(Birtday, newDays))
MsgBox(Birtday)
Dim ff() = strall.Split("-")
Txt_ResaulDay.Text = ff(2)
Txt_ResaulMonth.Text = ff(1)
Txt_ResaulYear.Text = ff(0)
End Sub
Public Function GetDateSpanText(ByVal fromDate As DateTime, Optional ByVal toDate As DateTime = Nothing) As String
Try
Dim years As Integer = 0, months As Integer = 0, days As Integer = 0
If toDate = Nothing Then toDate = DateTime.Now
Do Until toDate.AddYears(-1) < fromDate
years += 1
toDate = toDate.AddYears(-1)
Loop
Do Until toDate.AddMonths(-1) < fromDate
months += 1
toDate = toDate.AddMonths(-1)
Loop
Do Until toDate.AddDays(-1) < fromDate
days += 1
toDate = toDate.AddDays(-1)
Loop
Return (years & " Years " & "-" & months & " Months " & "-" & days & " Days ")
Catch ex As Exception
Return "Error"
End Try
End Function
اخي فاتتنا نقطة جدا هامة وهي ان الحساب الهجري ينقص عن الميلادي 11 يوم في السنة والبرنامج يحسب الغمر والفرق بالهجري
لذا من الواجب اضافة هذه الايام الى الناتج حتى يصبح حساب العمر حقيقيا بامكانك اضافتها في الحساب
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
19-08-19, 02:11 AM (آخر تعديل لهذه المشاركة : 19-08-19, 03:44 AM {2} بواسطة ابراهيم ايبو.)
السلام عليكم ورحمة الله وبركاته
ايام الثانوية العامة كانت علامتي قريبة من صفر في مادة الجبر وعلى النقيض في الهندسة (تحير الاساتذة مني وقتها)
والحمد لله بعد ساعتين من المعادلات الرياضية والبرمجية اكرمني الله ودعواتكم الى حساب فرق العمر الهجري وتحويله الى الميلادي انطلاقا من نتيجة الهجري ولاول مرة في البرمجة تصادفني كتابة ( قيمة القيمة)
اتمنى منكم التجريب والتقصي ان كان هناك خطأ (جل الله في علاه وحد لايخطئ)
هذا كود البوتون احسب
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Birtday As Date = CDate(Txt_BirtDay.Text & "/" & Txt_BirtManth.Text & "/" & Txt_BirtYear.Text)
Dim strall As String = (GetDateSpanText(Birtday, datNow))
MsgBox(Birtday)
Dim ff() As String = strall.Split("-")
Txt_ResaulDay.Text = ff(2)
Txt_ResaulMonth.Text = ff(1)
Txt_ResaulYear.Text = ff(0)
Dim kk As Integer = Val(Txt_ResaulYear.Text)
Dim totDays As Integer = (Convert.ToInt64(kk)) * 11
Dim yy As Double = (CDbl(totDays \ 365.25)).ToString ' عدد السنين
Dim MM As Double = (CDbl((totDays - (yy * 365.25)) \ 30.5)).ToString ' عدد الاشهر
Dim dd As Double = (CDbl((totDays - (yy * 365.25)) - (MM * 3.5))).ToString
If yy >= 1 Then
Txt_ResaulYear.Text = Val(ff(0)) - (yy + 1)
Else
Txt_ResaulYear.Text = Val(ff(0)) - 1
End If
If MM >= 1 And MM <= 12 Then
If (Val(ff(1)) - MM) < 0 Then
Txt_ResaulMonth.Text = 12 + Val(Val(ff(1)) - MM)
End If
ElseIf MM = 0 Then
Txt_ResaulMonth.Text = 11
Else
Txt_ResaulMonth.Text = Val(ff(1))
End If
If dd >= 1 And dd <= 30.5 Then
If (Val(ff(2)) - dd) < 0 Then
Txt_ResaulDay.Text = 30.5 + Val(Val(ff(2)) - dd)
End If
Else
Txt_ResaulDay.Text = Val(ff(2))
End If
End Sub
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات