منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : استخراج عدد السنين من مجموع عدد الاشهر
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
جاول تستخدم الدالة التالية لحساب اجمالي عدد أيام الخدمة
وياريت ترجع بالنتائج


PHP كود :
  Private Function GetTotalWorkingDays(startDate As DateTimeendDate As DateTime) As Integer
        Dim result 
As Integer 1
        If endDate 
startDate Then
            Dim diff 
CInt(endDate.Subtract(startDate).TotalDays)
 
           result += Enumerable.Range(resultdiff).Select(Function(xstartDate.AddDays(x)).Count(Function(xx.DayOfWeek <> DayOfWeek.Saturday AndAlso x.DayOfWeek <> DayOfWeek.Friday)
 
       End If
 
       Return result
    End 
Function 
فى هذه الحالة 
ستحتاج الى تحويل التاريخ الهجرى الى ميلادى

مثلاً لديك تاريخ 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)

       TextBox1.Text = DateDiff(DateInterval.Year, dd1, dd2)
       TextBox2.Text = Val(DateDiff(DateInterval.Month, dd1, dd2)) - Val(TextBox2.Text * 12)


تحياتى لك
وتمنياتى لك التوفيق
الف شكر للجميع

هذه مثال وضعته 

بالنسبة للدالة التي اضافة الاخ الفاضل silverlight  لم استطع استخدامها بالشكل الامثل ووضعتها في المثال آمل التعديل عليها


وبالنسبة للكود الذي وضعة الاخ الفاضل  elgokr 

اعطاني عدد السنوات 32 
ناقص سنة من تاريخ 1/6/1406 وحتى تاريخ اليوم 15/10/1439
من المفترض يكون الناتج 33 عام 
وتضاف اليه عدد الاشهر الباقية وهي 4 اشهر

في السطر الاخير ظهر خطاء
الاخ السائل بما أنك تستخدم التاريخ الهجرى فكل ما تحتاج اليه هو هذاه الاسطر 
ضعهم فى كود الزر أو حدث تغير قيمة 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 فتحصل علي عدد سنوات الخدمة
PHP كود :
Sub Servicecalc()
 
   Dim c As New UmAlQuraCalendar

    Dim d1 
As Date = New Date(140661c)
 
   Dim d2 As Date = New Date(14391015c)

 
   Dim y c.GetYear(d2) - c.GetYear(d1)
 
   Dim m c.GetMonth(d2) - c.GetMonth(d1)
 
   If m 0 Then y -= 12 Math.Abs(m)

 
   MsgBox("Years: " " , Months: " m)
End Sub 
مشاركة لاخواني اضع هذا الرابط.
(29-06-18, 02:56 PM)aftfm كتب : [ -> ]الف شكر للجميع

هذه مثال وضعته 

بالنسبة للدالة التي اضافة الاخ الفاضل silverlight  لم استطع استخدامها بالشكل الامثل ووضعتها في المثال آمل التعديل عليها


وبالنسبة للكود الذي وضعة الاخ الفاضل  elgokr 

اعطاني عدد السنوات 32 
ناقص سنة من تاريخ 1/6/1406 وحتى تاريخ اليوم 15/10/1439
من المفترض يكون الناتج 33 عام 
وتضاف اليه عدد الاشهر الباقية وهي 4 اشهر

في السطر الاخير ظهر خطاء


بالطبع سيعطيك عدد السنوات 32 اخى الكريم لان هذه هى السنوات الفعلية بالميلادي

لكن اذا كنت تريد احتساب التاريخ كما هو بالتاريخ الهجري ليصبح 33

كل ما عليك حذف الاسطر التالية من الكود
كود :
Dim culinf As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Thread.CurrentThread.CurrentCulture = culinf

وستجد بالنهاية ان الناتج 33 و 4 اشهر

تحياتى لك
وتمنياتى لك التوفيق
اشكر كل من ساهم في هذا الموضوع جزاكم الله خير

كود :

كود :
       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


هذا الكود ادى الغرض ولله الحمد ونتائج ممتازة 
قد اكون لم اسحن استخدام اكواد الاخوة الذين افادونا بمقترحاتهم ولكن اجدد شكري لهم
الشكر لله
تحياتى لك
وتمنياتى لك التوفيق
الصفحات : 1 2