السلام عليكم ورحمة الله وبركاته
لدي عدد اشهر مثلا 23 شهر واريد استخراج كم سنة من هذا الرقم والباقي يعتبر اشهر
في العدد الذي لدينا وهو (23) يعني 1,11
اي 1 سنة و 11 شهر
اريد معادلة او دالة لتحسب في ما لو كان عدد الاشهر كبير مثلا 37 شهر
من المفترض يكون لدينا 3 سنة و 1 شهر
بمعنى لا اريدة يظهر 3.08333333
ممكن تستخدم كود مثل هذا لحساب غدد السنوات و عدد الأشهر المتبقية معا
PHP كود :
Private Sub GetYears(months As Integer, ByRef years As Integer, ByRef 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)
الف شكر 10/10
ممكن طريقة تظهر عدد الاشهر بين تاريخين هجري
إقتباس :كود بشكل أبسط
في البرمجة لا يوجد شئ اسمه أسهل وأصعب
لكن فيه شئ اسمه كود صح او كود خطأ
اكتب الكود كيفما شئت المهم تكتبه صح وتضع في اعتبارك أن تتفادي الإخطاء أثناء التنفيذ
مثلا في الكود الخاص بك
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
(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 ارجاع الباقى من عملية القسمة
و بالنسبة لحساب فارق التاريخ فأنا وضعته لطلب الاخ السائل لكود يحسب فارق الاشهر بين تاريخين
رزقنا الله و اياكم علما نافعا و نفعنا بما علمنا
لاى فكرة تعدد الطرق بكتابة الاكواد
من حيث ما اقترحه الاخ 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)
فيمكن ابتكار العديد من الطرق والكثير من الحلول من خلال الاكواد
فكل ما يتم اقتراحه من الاعضاء فهو عائد الى افادة الجميع
ومن يختار ما هو مناسب اليه وما يمكنه التعامل معه هو صاحب الموضوع
وكل ما نفعله هو افادة وتعليم الاخرين بما سبق وتعلمناه
تحياتى للجميع
وتمنياتى لكم التوفيق
اشكر الجميع على التفاعل
ولكني استخدم التقويم الهجري وارغب في الحصول على سنوات الخدمة
من خلال تاريخ التعيين وحتى تاريخ اليوم الحالي
لكن المشكلة تظهر فروقات في الاشهر واعتقد ان سبب ذلك التقويم الميلادي
استخدمت هذا الكود لاخراج الفرق بين التاريخين ولكن بعدد الاشهر
لانه سيكون مثلا سنوات الخدمة عدد السنين و عدد الاشهر مثلا 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]
ولكن النتائح غير دقيقة اعتقد ان الكود الذ اضفته فيه خلل آمل تعديل على الكود
(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
وبكده التواريخ ستعمل بالنظام الميلادى
فيمكنك بعدها التعامل من جلب الفارق بين التاريخين
تحياتى لك
وتمنياتى لك التوفيق
الف شكر
استخدم في البرنامج التاريخ الهجري
لذلك في التواريخ القريبة من عام 1439 لا تظهر مشكلة
ولكن في التواريخ القديمة مثل عام 1406 وحتى عام 1439 يعطي نتائج غير صحيحة
سأعمل مثال واضيفة ومن ثم التعديل عليه