منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
استخراج عدد السنين من مجموع عدد الاشهر - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : استخراج عدد السنين من مجموع عدد الاشهر (/showthread.php?tid=25527)

الصفحات: 1 2


استخراج عدد السنين من مجموع عدد الاشهر - aftfm - 27-06-18

السلام عليكم ورحمة الله وبركاته

لدي عدد اشهر مثلا 23 شهر واريد استخراج كم سنة من هذا الرقم والباقي يعتبر اشهر

في العدد الذي لدينا وهو (23) يعني 1,11

اي 1 سنة و 11 شهر

اريد معادلة او دالة لتحسب في ما لو كان عدد الاشهر كبير مثلا 37 شهر 


من المفترض يكون لدينا 3 سنة و 1 شهر

بمعنى لا اريدة يظهر 3.08333333


RE: استخراج عدد السنين من مجموع عدد الاشهر - silverlight - 27-06-18

ممكن تستخدم كود مثل هذا لحساب غدد السنوات و عدد الأشهر المتبقية معا


PHP كود :
   Private Sub GetYears(months As IntegerByRef years As IntegerByRef remainingMonths As Integer)
 
       If months 0 Then
            Dim x 
As Integer Math.Truncate(months 12)
 
           If x >= 0 Then
                years 
x
            End 
If

 
           Dim y As Integer months - (years 12)
 
           If y >= 0 Then
                remainingMonths 
y
            End 
If
 
       End If
 
   End Sub 

طريقة الاستخدام


كود :
       Dim years As Integer = Nothing
       Dim remainingMonths As Integer = Nothing
       GetYears(23, years, remainingMonths)



RE: استخراج عدد السنين من مجموع عدد الاشهر - aftfm - 27-06-18

الف شكر 10/10

ممكن طريقة تظهر عدد الاشهر بين تاريخين هجري


RE: استخراج عدد السنين من مجموع عدد الاشهر - mrnooo2000 - 28-06-18

كود بشكل أبسط 

كود :
       Dim Years As Integer = 23 \ 12
       Dim Months As Integer = 23 Mod 12
       Dim Monthsdif As Integer = DateDiff("m", Today.Date, New Date(2030, 6, 1))



RE: استخراج عدد السنين من مجموع عدد الاشهر - silverlight - 28-06-18

إقتباس :كود بشكل أبسط
في البرمجة لا يوجد شئ اسمه أسهل وأصعب
لكن فيه شئ اسمه كود صح او كود خطأ
اكتب الكود كيفما شئت المهم تكتبه صح وتضع في اعتبارك أن تتفادي الإخطاء أثناء التنفيذ
مثلا في الكود الخاص بك

PHP كود :
Dim Years As Integer 23 12 
ناتج هذا الكود سيعطيك 2 و ليس 1 و يفترض بك أن تستخدم Math.Truncate


بخصوص الفرق بين تاريخين يمكن استخدام كود مثل التالي


PHP كود :
       Dim startDate As DateTime DateTimePicker1.Value
        Dim endDate 
As DateTime DateTimePicker2.Value
        Dim days 
As Integer 0
        If startDate 
<> Nothing AndAlso endDate <> Nothing Then
            If endDate 
startDate Then
                days 
+= CInt(endDate.Subtract(startDate).TotalDays)
 
           End If
 
       End If 



RE: استخراج عدد السنين من مجموع عدد الاشهر - mrnooo2000 - 28-06-18

(28-06-18, 01:52 PM)silverlight كتب :
إقتباس :كود بشكل أبسط
في البرمجة لا يوجد شئ اسمه أسهل وأصعب
لكن فيه شئ اسمه كود صح او كود خطأ
اكتب الكود كيفما شئت المهم تكتبه صح وتضع في اعتبارك أن  تتفادي الإخطاء أثناء التنفيذ
مثلا في الكود الخاص بك

PHP كود :
Dim Years As Integer 23 12 
ناتج هذا الكود سيعطيك 2 و ليس 1 و يفترض بك أن تستخدم Math.Truncate

أشكرك أخى على التوضيح 

لكن اسمح لى أن أختلف معك 
من قال أنه لا يوجد شىء اسمه أسهل و أصعب 
بالطبع يمكن حل أى مشكلة بأكثر من حل لكن بالتأكيد هناك حل يكون سهل و بسيط و و واضح 
و هناك حل من الممكن أن يكون أكثر تعقيدا أو صعب استيعابه ( و هنا لا أقصد الكود الخاص بك ) 
و لكن أنا أتكلم بشكل عام 

بالنسبة لتفادى الأخطاء فأنا أتركها لصاحب السؤال 
أنا فقط أحاول أن أعطى الفكرة و أترك التطبيق لصاحب السؤال 
لأن الهدف هنا تعليمى بحت و ليس مجرد قص و لصق 
و بالنسبة للكود 
كود :
Dim Years As Integer = 23 \ 12

فهو يعطى نتيجة صحيحة و اعتقد انك تحتاج الى مراجعة الكود 
فأنا لم أخترع العجلة فوظيفة back slash  هنا هى ارجاع ناتج القسمة الصحيح
كما هى وظيفة mod ارجاع الباقى من عملية القسمة 

و بالنسبة لحساب فارق التاريخ فأنا وضعته لطلب الاخ السائل لكود يحسب فارق الاشهر بين تاريخين 

رزقنا الله و اياكم علما نافعا و نفعنا بما علمنا


RE: استخراج عدد السنين من مجموع عدد الاشهر - elgokr - 28-06-18

لاى فكرة تعدد الطرق بكتابة الاكواد

من حيث ما اقترحه الاخ silverlight
فهو  قام بطرح الطريقة الافتراضية والصحيحة لما هو مقصود

لكن هل يعنى انه لا يوجد طرق اخرى وحلول اخرى بالطبع لا
يوجد الالاف من الطرق كما قدمه الاخ mrnooo2000

واذا كنا نتحدث عن طرق اخرى وبتقليل الاكواد

فيمكن ايضاً استخدام الفكرة عبارة عن سطر واحد فقط باستخدام التالى
كود :
Dim GetYM As String() = Split(Math.Round(Val(23 / 12), 3), ".")

وعند استدعاء عدد السنوات يتم كتابة كمثال
كود :
TextBox1.Text = GetYM(0)

وعند استدعاء الاشهر يتم كتابة كمثال
كود :
TextBox2.Text = Math.Round(Val(GetYM(1) / 1000) * 12, 0)

فيمكن ابتكار العديد من الطرق والكثير من الحلول من خلال الاكواد

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

وكل ما نفعله هو افادة وتعليم الاخرين بما سبق وتعلمناه

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



RE: استخراج عدد السنين من مجموع عدد الاشهر - aftfm - 28-06-18

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

من خلال تاريخ التعيين وحتى تاريخ اليوم الحالي

لكن المشكلة تظهر فروقات في الاشهر واعتقد ان سبب ذلك التقويم الميلادي

استخدمت هذا الكود لاخراج الفرق بين التاريخين ولكن بعدد الاشهر 
لانه سيكون مثلا سنوات الخدمة عدد السنين و عدد الاشهر مثلا 20 سنة 5 اشهر

كود :
dim offset =new Date(1,1,1)
dim dateOne as DateTime = Convert.ToDateTime(Me.DateTimePicker1.Text)
dim dateTwo as DateTime = Convert.ToDateTime(Me.DateTimePicker2.Text)
dim diff as TimeSpan = datetwo - dateone
dim ye =(offset + diff).year
dim y, d as strintg
y=ye.toString
d=(datetwo.Month - dateone.month)
dim monthtotal as integer =((y *12)+d)

ومن ثم وضعت الناتج في الدالة الذي اضافها الاخ الفاضل [b]silverlight[/b]

ولكن النتائح غير دقيقة اعتقد ان الكود الذ اضفته فيه خلل آمل تعديل على الكود


RE: استخراج عدد السنين من مجموع عدد الاشهر - elgokr - 28-06-18

(28-06-18, 09:51 PM)aftfm كتب : اشكر الجميع على التفاعل
ولكني استخدم التقويم الهجري وارغب في الحصول على سنوات الخدمة 

من خلال تاريخ التعيين وحتى تاريخ اليوم الحالي

لكن المشكلة تظهر فروقات في الاشهر واعتقد ان سبب ذلك التقويم الميلادي

استخدمت هذا الكود لاخراج الفرق بين التاريخين ولكن بعدد الاشهر 
لانه سيكون مثلا سنوات الخدمة عدد السنين و عدد الاشهر مثلا 20 سنة 5 اشهر

كود :
dim offset =new Date(1,1,1)
dim dateOne as DateTime = Convert.ToDateTime(Me.DateTimePicker1.Text)
dim dateTwo as DateTime = Convert.ToDateTime(Me.DateTimePicker2.Text)
dim diff as TimeSpan = datetwo - dateone
dim ye =(offset + diff).year
dim y, d as strintg
y=ye.toString
d=(datetwo.Month - dateone.month)
dim monthtotal as integer =((y *12)+d)

ومن ثم وضعت الناتج في الدالة الذي اضافها الاخ الفاضل [b]silverlight[/b]

ولكن النتائح غير دقيقة اعتقد ان الكود الذ اضفته فيه خلل آمل تعديل على الكود


الامر بسيط

اذا كان الاستخدام التاريخ الهجري بسبب الجهاز
فبدلاً من جلب الفروقات بين التاريخين او تحويل التاريخ من والى 

فكل ما عليك هو استخدام السطر التالى
كود :
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB")

مع استدعاء كلاً من
كود :
Imports System.Globalization
Imports System.Threading

وبكده التواريخ ستعمل بالنظام الميلادى
فيمكنك بعدها التعامل من جلب الفارق بين التاريخين

تحياتى لك 
وتمنياتى لك التوفيق



RE: استخراج عدد السنين من مجموع عدد الاشهر - aftfm - 28-06-18

الف شكر 

استخدم في البرنامج التاريخ الهجري
لذلك في التواريخ القريبة من عام 1439 لا تظهر مشكلة
ولكن في التواريخ القديمة مثل عام 1406 وحتى عام 1439 يعطي نتائج غير صحيحة

سأعمل مثال واضيفة ومن ثم التعديل عليه