22-09-16, 12:34 AM
(آخر تعديل لهذه المشاركة : 22-09-16, 12:40 AM {2} بواسطة silverlight.)
PHP كود :
Private Function GenerateNationalDateStrings(days As String(), months As String()) As String()
Dim dates As List(Of String) = New List(Of String)()
Dim total As Integer = days.Length - 1
For i As Integer = 0 To total
Dim d As String = days(i)
Dim m As String = months(i)
Dim y As String = DateTime.Now.Year.ToString()
Dim dt As String = String.Concat(New String() {d.ToString(Globalization.CultureInfo.CurrentCulture), "/", m.ToString(Globalization.CultureInfo.CurrentCulture), "/", y.ToString(Globalization.CultureInfo.CurrentCulture)})
dates.Add(dt)
Next
Return dates.ToArray
End Function
Private Function GenerateNationalDateStrings() As String()
Return GenerateNationalDateStrings({"22", "26", "14", "30"}, {"05", "09", "10", "11"})
End Function
Private Function GenerateAnnualDateStrings(startdate As DateTime, endDate As DateTime) As String()
Dim dates As New List(Of String)()
While startdate <= endDate
Dim s As String = CType(Convert.ChangeType(startdate.ToShortDateString, GetType(String)), String)
dates.Add(s)
startdate = startdate.AddDays(1)
End While
Return dates.ToArray
End Function
Private Function GetAnnualLevaeDays(annualDates As String(), nationalDates As String()) As Integer
Return (annualDates.Intersect(nationalDates).Count) + (annualDates.Count)
End Function
في الكود أعلاه :
الدالة الأولي و الثانية الهدف منهم هو حساب مصفوفة الاعياد الوطنية لذلك ستلاحظ انني قمت بتمرير الايام التي كتيتها أنت الي هذه الدالة
الدالة الثالثة الهدف منها هو حساب مصفوفة تمثل الايام الموجودة بين تاريخ بداية الاجازة و تاريخ نهاية الأجازة
الدالة الاخيرة و هي GetAnnualLevaeDays هي ما يهمك فعليا لانها التي يتم فيها حساب اجمالي ايام الاجازة وذلك ان كان هناك يوم من الاعياد الوطنية يقع بين تاريخ بداية الاجازة و تاريخ نهاية الاجازة
الكود التالي يوضح كيف تستخدم الكود أعلاه لحساب عدد ايام الاجازة الكلي شاملا الاعياد الوطنية ان وُجدت
PHP كود :
Dim startDate As DateTime = New DateTime(2016, 10, 1)
Dim endDate As DateTime = New DateTime(2016, 10, 31)
PHP كود :
Dim i As Integer = GetAnnualLevaeDays(GenerateAnnualDateStrings(startDate, endDate), GenerateNationalDateStrings())
ملحوظة:
جميع الدوال من الممكن كتابتها بطرق كثيرة .... فهنا في الكود اعلاه كل المصفوفات المستخدمة هي من النوع String لكن من السهل تحويل كل شئ الي مصفوفات من النوع DateTime لكن هذا لن يؤثر في اي شئ لأن دور المصفوفات هنا يقتصر علي حساب ما هو موجود بالمصفوفات

