اذهب الي المحتوي
أوفيسنا

حساب التاريخ بدقه


99عمرو

الردود الموصى بها

الاخوه الافاضل انا استخدم الداله Year(now)- Year(fieldname) ولكن تعطينى حسبة عدد السنين ولكن دون حساب الاشهر لاعطاء السنين مظبوطه 
مثلا تاريخ اليوم 31/1/2017 ناقص تاريخ 22/2/2014 اريد ان يحسب الشهور بحيث يكون الطرح من السنين وحساب الشهور ليعطى عدد مظبوط 

رابط هذا التعليق
شارك

15 دقائق مضت, 99عمرو said:

الاخوه الافاضل انا استخدم الداله Year(now)- Year(fieldname) ولكن تعطينى حسبة عدد السنين ولكن دون حساب الاشهر لاعطاء السنين مظبوطه 
مثلا تاريخ اليوم 31/1/2017 ناقص تاريخ 22/2/2014 اريد ان يحسب الشهور بحيث يكون الطرح من السنين وحساب الشهور ليعطى عدد مظبوط 

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

Option Compare Database
Option Explicit

Public Function Diff2Dates(interval As String, Date1 As Date, Date2 As Date, Optional ShowZero As Boolean = False) As Variant

On Error GoTo Err_Diff2Dates

   Dim booCalcYears As Boolean
   Dim booCalcMonths As Boolean
   Dim booCalcDays As Boolean
   Dim booSwapped As Boolean
   Dim dtTemp As Date
   Dim intCounter As Integer
   Dim lngDiffYears As Long
   Dim lngDiffMonths As Long
   Dim lngDiffDays As Long
   Dim varTemp As Variant

   Const INTERVALs2 As String = "ddmmyy"
   interval = LCase$(interval)
   For intCounter = 1 To Len(interval)
      If InStr(1, INTERVALs2, Mid$(interval, intCounter, 1)) = 0 Then
         Exit Function
      End If
   Next intCounter

   If Not (IsDate(Date1)) Then Exit Function
   If Not (IsDate(Date2)) Then Exit Function

   If Date1 > Date2 Then
      dtTemp = Date1
      Date1 = Date2
      Date2 = dtTemp
      booSwapped = True
   End If

   Diff2Dates = Null
   varTemp = ""

   booCalcYears = (InStr(1, interval, "y") > 0)
   booCalcMonths = (InStr(1, interval, "m") > 0)
   booCalcDays = (InStr(1, interval, "d") > 0)
   If booCalcYears Then
      lngDiffYears = Abs(DateDiff("yyyy", Date1, Date2)) - _
              IIf(Format$(Date1, "mmdd") <= Format$(Date2, "mmdd"), 0, 1)
      Date1 = DateAdd("yyyy", lngDiffYears, Date1)
   End If

   If booCalcMonths Then
      lngDiffMonths = Abs(DateDiff("m", Date1, Date2)) - _
              IIf(Format$(Date1, "ddhh") <= Format$(Date2, "ddhh"), 0, 1)
      Date1 = DateAdd("m", lngDiffMonths, Date1)
   End If

   If booCalcDays Then
      lngDiffDays = Abs(DateDiff("d", Date1, Date2)) - _
              IIf(Format$(Date1, "hhnnss") <= Format$(Date2, "hhnnss"), 0, 1)
      Date1 = DateAdd("d", lngDiffDays, Date1)
   End If


   If booCalcYears And (lngDiffYears > 0 Or ShowZero) Then
      varTemp = lngDiffYears & IIf(lngDiffYears <> 1, " Óäå  ", " Óäå  ")
   End If

   If booCalcMonths And (lngDiffMonths > 0 Or ShowZero) Then
      If booCalcMonths Then
         varTemp = varTemp & IIf(IsNull(varTemp), Null, " æ ") & _
                   lngDiffMonths & IIf(lngDiffMonths <> 1, "   ", "   ")
      End If
   End If

   If booCalcDays And (lngDiffDays > 0 Or ShowZero) Then
      If booCalcDays Then
         varTemp = varTemp & IIf(IsNull(varTemp), Null, " æ ") & _
                   lngDiffDays & IIf(lngDiffDays <> 1, " íæã", " íæã")
      End If
   End If

   If booSwapped Then
      varTemp = "-" & varTemp
   End If

   
   
   Diff2Dates = Trim$(varTemp)
End_Diff2Dates:
   Exit Function

Err_Diff2Dates:
   Resume End_Diff2Dates

End Function

ومثلا عندك مربع نصي للتاريخ الاول اي اليوم باسم tarix1
ومربع اخر للتاريخ الثاني اي لتاريخ 22\2\2014 باسم tarix2
ومربع نصي اخر لكي يڤهر فيها نتيجه‌ باسم text1
وعندك زر لكي يحسبك النتيجه‌ اكتب في محرر فيجوال بعد تضغط كليك عليه هذا الكود

Me.text1 = IIf(Diff2Dates("ddmmyy", [tarix2], [tarix1], False) = "", "0 íæã", Diff2Dates("ddmmyy", [tarix2], [tarix1], False))

جرب وشوف النتيجة

  • Like 1
رابط هذا التعليق
شارك

13 دقائق مضت, 99عمرو said:

تفضل اخى

Database.rar

اتفضل اخي ملفك بعد تعديل
لكن هناك ملاحظة
لا تستخدم الكلمات المحجوزه‌ لقاعده‌ بياناتك مثلا time,now
انا غيرتها 
واستخدمت ذاك الوحدة النمطية
مع هذا الكود

جرب حين تكتب التاريخ
 

Me.ca = IIf(Diff2Dates("ddmmyy", Nz([time1]), Nz([now1]), False) = "", "0 íæã", Diff2Dates("ddmmyy", Nz([time1]), Nz([now1]), False))

 

Database (1).rar

تم تعديل بواسطه Shivan Rekany
رابط هذا التعليق
شارك

2 minutes ago, صالح حمادي said:

تفضل شوف هذه المشاركة

 

اخى صالح انا اريد ان احسب عدد السنين فقط فى حقل محسوب ما بين تاريخين و ان تكون الحسبه دقيقه بان تقوم بطرح الشهور و الايام حتى اذا وصل تاريخ اليوم نفس تاريخ الميلاد تحتسب السنه مثلا 
تاريخ الميلاد 1/1/1990
اليوم 1/1/2017 

فيتم احتساب السنه

3 minutes ago, Shivan Rekany said:

اتفضل اخي ملفك بعد تعديل
لكن هناك ملاحظة
لا تستخدم الكلمات المحجوزه‌ لقاعده‌ بياناتك مثلا time,now
انا غيرتها 
واستخدمت ذاك الوحدة النمطية
مع هذا الكود

جرب حين تكتب التاريخ
 


Me.ca = IIf(Diff2Dates("ddmmyy", Nz([time1]), Nz([now1]), False) = "", "0 íæã", Diff2Dates("ddmmyy", Nz([time1]), Nz([now1]), False))

 

Database (1).rar

سلمت يداك اخى شفان ولكن انا اريد حسبة السنين فقط فى الحل المحسوب كما وضحت 

 

اتاريخ الميلاد 1/1/1990
اليوم 1/1/2017 

فيتم احتساب عدد السنين فقط ارقام فى الحقل المحسوب

رابط هذا التعليق
شارك

8 دقائق مضت, 99عمرو said:

سلمت يداك اخى شفان ولكن انا اريد حسبة السنين فقط فى الحل المحسوب كما وضحت 

اتاريخ الميلاد 1/1/1990
اليوم 1/1/2017 

فيتم احتساب عدد السنين فقط ارقام فى الحقل المحسوب

في هذه الحالة لا تحتاج لاي وحدات نمطية
اليك هذا الكود
اخليها في كلا حقلين بعد تحديث
 

Me.ca = DateDiff("yyyy", Nz([time1]), Nz([now1]))

واليك ملفك بعد تعديل
شوف هل هو المطلوب بس سنين فقط

Database (1).rar

تم تعديل بواسطه Shivan Rekany
رابط هذا التعليق
شارك

نعم هذا الأمر موجود في هذه المشاركة بالإضافة لعدد الأيام و الشهور.

هو لا يحسب السنة إلا إذا كانت 12 شهرا كاملة و لا يحسب الشهر إلا إذا كان 30 يوما كاملا.

و أنت خذ الجزء الخاص بالسنوات فقط و جربه فهو يحسب عدد الأيام بين التاريخين ثم يحول هذه الأيام إلى سنوات

لاحظ المرفق التالي وضعت فيه السنوات فقط.

 

 

حساب العمر.rar

  • Like 1
رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

تفضل التعديل على ملفك.

و كما ذكر الأستاذ تشيفان . تجنب تسميت العناصر و الكائنات بالكلمات المحجوزة في الأكسس

 

Database.rar

تم تعديل بواسطه صالح حمادي
  • Like 1
رابط هذا التعليق
شارك

7 minutes ago, صالح حمادي said:

تفضل التعديل على ملفك.

و كما ذكر الأستاذ تشيفان . تجنب تسميت العناصر و الكائنات بالكلمات المحجوزة في الأكسس

 

Database.rar

سلمت يداك اخى صالح ولكن ممكن شرح الكود

رابط هذا التعليق
شارك

DateDiff("d", Me.time1, Me.now1)

هذه لحساب الفرق بين التاريخين بالأيام "d"

DatePart

و هذه الدالة لتحويل الأيام إلى سنة "yyyy"

و لو تلاحظ و ضعت -1900 في الأخير ذلك لأن الدالة تبدأ الحساب من 1900 هذا و الله أعلم

  • Like 1
رابط هذا التعليق
شارك

57 دقائق مضت, Shivan Rekany said:

Me.ca = DateDiff("yyyy", Nz([time1]), Nz([now1]))

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

& "سنة"

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

  • Like 1
رابط هذا التعليق
شارك

5 minutes ago, Shivan Rekany said:

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


& "سنة"

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

سلمت يداك اخى لم أخذ بالى من كلمة سنه 

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information