تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
استخراج عدد السنين من مجموع عدد الاشهر
#11
جاول تستخدم الدالة التالية لحساب اجمالي عدد أيام الخدمة
وياريت ترجع بالنتائج


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 
Retired
الرد }}}
تم الشكر بواسطة: elgokr
#12
فى هذه الحالة 
ستحتاج الى تحويل التاريخ الهجرى الى ميلادى

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


تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: sendbad100
#13
الف شكر للجميع

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

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


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

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

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


الملفات المرفقة
.rar   YearsOfService.rar (الحجم : 65 ك ب / التحميلات : 19)
الرد }}}
تم الشكر بواسطة:
#14
الاخ السائل بما أنك تستخدم التاريخ الهجرى فكل ما تحتاج اليه هو هذاه الاسطر 
ضعهم فى كود الزر أو حدث تغير قيمة 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
الرد }}}
تم الشكر بواسطة: aftfm , aftfm
#15
كود :
       ' تحديد تاريخ بداية الخدمة
       Dim serviceStarted As DateTime = DateTimePicker1.Value
       ' تحديد تاريخ نهاية الخدمة
       Dim serviceEnd As DateTime = DateTimePicker2.Value
       ' حساب عدد أيام الخدمة
       Dim days As Integer = GetTotalWorkingDays(serviceStarted, serviceEnd)
       ' اقسم عدد الايام علي 30 فتتحصل علي عدد شهور الخخدمة أو اقسم عدد الأيام علي 365 فتحصل علي عدد سنوات الخدمة
Retired
الرد }}}
تم الشكر بواسطة: سعود , aftfm
#16
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 
الرد }}}
تم الشكر بواسطة: سعود , aftfm
#17
مشاركة لاخواني اضع هذا الرابط.
الرد }}}
تم الشكر بواسطة: aftfm
#18
(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 اشهر

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: aftfm
#19
اشكر كل من ساهم في هذا الموضوع جزاكم الله خير

كود :

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


هذا الكود ادى الغرض ولله الحمد ونتائج ممتازة 
قد اكون لم اسحن استخدام اكواد الاخوة الذين افادونا بمقترحاتهم ولكن اجدد شكري لهم
الرد }}}
تم الشكر بواسطة: elgokr
#20
الشكر لله
تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم