29-06-18, 12:11 AM (آخر تعديل لهذه المشاركة : 29-06-18, 12:11 AM {2} بواسطة silverlight.)
جاول تستخدم الدالة التالية لحساب اجمالي عدد أيام الخدمة
وياريت ترجع بالنتائج
PHP كود :
Private Function GetTotalWorkingDays(startDate As DateTime, endDate As DateTime) As Integer Dim result As Integer = 1 If endDate > startDate Then Dim diff = CInt(endDate.Subtract(startDate).TotalDays) result += Enumerable.Range(result, diff).Select(Function(x) startDate.AddDays(x)).Count(Function(x) x.DayOfWeek <> DayOfWeek.Saturday AndAlso x.DayOfWeek <> DayOfWeek.Friday) End If Return result End Function
29-06-18, 12:39 AM (آخر تعديل لهذه المشاركة : 29-06-18, 01:02 AM {2} بواسطة elgokr.)
فى هذه الحالة
ستحتاج الى تحويل التاريخ الهجرى الى ميلادى
مثلاً لديك تاريخ 1/6/1406 والذى يوافق 11/2/1986
الى التاريخ 14/10/1439 والذى يوافق 28/6/2018
من ثم عمل فارق التاريخ بين من الى للتاريخ الميلادى
وبكده تكون حللت مشكلة فارق الايام التى بالسنة
والتى تعطي فارق بين السنين
طريقة تحويل التاريخ الهجري الى ميلادى
كود :
Dim hijri As New HijriCalendar()
Dim dt As Date = New DateTime(1406, 6, 1, hijri)
TextBox1.Text = dt.ToString("dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US"))
ولطريقة الاستخدام كاملاً طبقاً لما فهمته من طلبك
كل ما عليك استخدام الكود التالى مع تغيير التواريخ لما هو لديك
كود :
Dim culinf As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
Thread.CurrentThread.CurrentCulture = culinf
Dim hijri As New HijriCalendar()
Dim dt1 As Date = New Date(1406, 6, 1, hijri)
Dim dt2 As Date = New Date(1439, 10, 14, hijri)
Dim datTim1 As String() = Split(dt1.ToString("yyyy/MM/dd", culinf), "/")
Dim datTim2 As String() = Split(dt2.ToString("yyyy/MM/dd", culinf), "/")
Dim dd1 As Date = New Date(1986, 2, 11)
Dim dd2 As Date = New Date(2018, 6, 28)
29-06-18, 03:57 PM (آخر تعديل لهذه المشاركة : 29-06-18, 04:09 PM {2} بواسطة mrnooo2000.)
الاخ السائل بما أنك تستخدم التاريخ الهجرى فكل ما تحتاج اليه هو هذاه الاسطر
ضعهم فى كود الزر أو حدث تغير قيمة DateTimepicker
كود :
Dim Months As Integer = DateDiff("m", DateTimePicker1.Value, Today.Date)
TextBox1.Text = Months \ 12
TextBox2.Text = Months Mod 12
و اذا كنت تستخدم التاريخ الميلادى و تريد حساب الفارق بالتاريخ الهجرى
أضف هذين السطرين قبل الكود السابق
كود :
Dim ci As New Globalization.CultureInfo("ar-SA")
Thread.CurrentThread.CurrentCulture = ci
جرب و أخبرنى بالنتيجة
جربت هذا الكود لدى لتجربة التاريخين الموجودين فى مشاركتك و كانت النتيجة كما ذكرت 33 سنة و 4 أشهر
كود :
Dim ci As New Globalization.CultureInfo("ar-SA")
Thread.CurrentThread.CurrentCulture = ci
Dim hijri As New UmAlQuraCalendar()
Dim dt1 As Date = New Date(1406, 6, 1, hijri)
Dim dt2 As Date = New Date(1439, 10, 15, hijri)
Dim Months As Integer = DateDiff("m", dt1, dt2)
TextBox1.Text = Months \ 12
TextBox2.Text = Months Mod 12
' تحديد تاريخ بداية الخدمة
Dim serviceStarted As DateTime = DateTimePicker1.Value
' تحديد تاريخ نهاية الخدمة
Dim serviceEnd As DateTime = DateTimePicker2.Value
' حساب عدد أيام الخدمة
Dim days As Integer = GetTotalWorkingDays(serviceStarted, serviceEnd)
' اقسم عدد الايام علي 30 فتتحصل علي عدد شهور الخخدمة أو اقسم عدد الأيام علي 365 فتحصل علي عدد سنوات الخدمة