السلام عليكم ورحمة الله و بركاته
إخواني الكرام كيف يمكن الحصول على الفرق بين توقيتين
هل هناك دالة لعمل ذلك مثل الدالة DateDiff خاصة بالتعامل مع التوقيت
و جزاكم الله خيراً .
السلام عليكم ورحمة الله و بركاته
إخواني الكرام كيف يمكن الحصول على الفرق بين توقيتين
هل هناك دالة لعمل ذلك مثل الدالة DateDiff خاصة بالتعامل مع التوقيت
و جزاكم الله خيراً .

السلام عليكم ورحمة الله وبركاته
اخي نفس الدالة يمكنها حساب الفرق في الوقت
جرب الكود التالي
Label1 = DateDiff("s", "12:10:00", "12:10:20")مع العلم ان حرف الـ s يعني اننا نريد استخراج الوقت في الثواني
واليك الرموز الاخرى ومعنى كل واحد فيهم
d = day h = hour m = month n = minute q = quarter s = second w = weekday (day of week) ww = week y = day of year yyyy = year
ولكن انتبه لشئ مهم
وهو ان الثواني تزيد لكي تكون دقيقة
والدقائق تزيد الى ساعة ...الخ
والمقصود هنا انك عند حساب فرق التوقيت سوف يخرج الناتج فمن الممكن ان تحصل على ناتج فرق الثواني اكبر من 60
جرب الكود التالي وستفهم ما اقصده
Label1 = DateDiff("s", "12:09:00", "12:10:20")لذلك عليك تنظيم وتعديل القيم المستخرجة من الكود السابق حتى تحصل على فرق توقيت سليم
ارجو ان تكون الفكرة وضحت
ولو ظهرت عندك مشكلة فيها اخبرني و نحاول نحلها مع بعض او اقوم باعداد مثال صغير لذلك
بالتوفيق
===================
الى اللقاء
تم تعديل هذه المشاركة بواسطة MR^King في 28 يوليو 2006 في 17:15
JusT LeT YouR MinD WorK
واضح جداً جزاك الله كل خير
تم تعديل هذه المشاركة بواسطة COMFORT في 28 يوليو 2006 في 22:42

أخي الكريم Mr^King
تحدث مشكلة أثناء طرح التاريخين
و هي كالتالي :
عندما أريد مثلاً طرح "12:30" و "01:30"
استخدمت السطر التالي:
Dim strDiff As String
strDiff = DateDiff("S" , "12:30","01:30")المفروض أن الناتج يظهر بفرق ساعة أي 3600 ثانية أليس كذلك و لكنه أنتج 21600 ثانية
و عند التبديل كالتالي :
strDiff = DateDiff("S" , "01:30","12:30")يظهر نفس الناتج و لكن بالسالب و السبب واضح و لا شيء في ذلك
و لكن الكود يعمل بشكل صحيح عندما أطرح قيم وقعت في ساعة واحدة مثل :
strDiff = DateDiff("S" , "12:30","12:35")فإن الناتج سيظهر 300 ثانية و للتحويل إلى دقائق ( 300 ÷ 60 ) = 5 دقائق .
هل هذا يخص تحديد إن كان التوقيت صباحاً أم مساءً ؟ أعتقد ذلك
هذا مثال مرفق لما واجهت .
أتمنى أن أكون قد وضحت المشكلة و أتمنى أن تفيدنا بالحل و جزاك الله خيراً .

السلام عليكم ورحمة الله وبركاته
اخي العزيز كومفورت
لاحظ انك هنا تعمل بنظام 12 ساعة , أي انه لا بد من تحديد نوع التوقيت (صباحا , مساء) وهناك حالتين في هذا الموضوع
اذا كنت تستخدم التوقيت بالصيغة الانجليزية فان التوقيت صباح يرمز له بالرمز AM ومساء بالرمز PM
اما بالصيغة العربية نستخدم في الصباح حرف "ص" ومساء حرف "م"
وستتعرف الدالة على هذا الفارق في التوقيت
لكن لابد ان تجد طريقة لوضع نوع التوقيت ( "ص" أو "م" ) واضافته الى الوقت المدخل حتى تتعرف الدالة على التوقيت الصحيح
وسأقوم بشرح الكود هنا لتعم الفائدة ..
أولا قم بعمل التعريفات التالية :
Dim strDiff As String Dim mysec As Long ' يفضل ان يكون long لتفادي مشكلة ضخامة عدد الثواني Dim mymin As Integer
سنحسب الفرق في التوقيت عن طريق الثواني فقط مع العلم انه يمكن عمل ذلك عن طريق الدقائق او الساعات ولكن العملية كلها عملية حسابات فقط
نحسب الفرق بين التوقيتين عن طريق الكود التالي
mysec = DateDiff("s", txtFirstTime.Text, txtSecondTime.Text)هنا لدينا رقم واحد يعبر عن الفرق بين التوقيتين بعدد الثواني وهذا ما سنقوم بالعمل عليه حتى نستخلص التوقيت السليم
Do While mysec >= 60 mysec = mysec - 60 mymin = mymin + 1 Loop
يتم زيادة عدد الساعات بمقدار 1 ساعة كلما كان عدد الدقائق أكبر من أو يساوي 60 دقيقة
Do While mymin >= 60 mymin = mymin - 60 strDiff = strDiff + 1 Loop
وهنا يتم زيادة الدقائق بمقدار 1 دقيقة كلما كان عدد الثواني أكبر من او يساوي 60 ثانية
-----------------------
If Val(mymin) < 0 Then MsgBox "التوقيت المدخل خاطئ من فضلك ادخل التوقيت الصحيح", 16, "خطأ": Exit Sub If Val(mysec) < 0 Then MsgBox "التوقيت المدخل خاطئ من فضلك ادخل التوقيت الصحيح", 16, "خطأ": Exit Sub
فائدة السطرين السابقين هي :
انه لو ادخل المستخدم التوقيت بصورة خاطئة فسيكون الناتج بالسالب وهذا غير منطقي وبالتالي ستظهر له رسالة الخطأ حتى يقوم بتعديل التوقيت المدخل
-----------------------
المهم في الموضوع كله هو الأخذ في الاعتبار ادخال التوقيت بشكل سليم فلا يصح ادخال التوقيت المتأخر في التكست بوكس الاول وادخال التوقيت الذي قبله في التكست بوكس الثاني لأن ذلك سيكون عكس اتجاه عقارب الساعة وسيكون صيغته خاطئة
أتمنى اكون وفقت في شرح الفكرة ولو هناك اي مشكلة اكتبها ونحاول نحلها ان شاء الله
تمنياتي بالتوفيق :)
=======================
الى اللقاء
تم تعديل هذه المشاركة بواسطة MR^King في 1 أغسطس 2006 في 15:07
JusT LeT YouR MinD WorK
أخي Mr^King
الرد واضح و و افي
لكن عندي بعض الاستفسارات
1. هل يوجد فرق بين الصيغة العربية و الانجليزية من حيث تحديد نوع التوقيت [(ص ، م) أو (AM , PM)]
أليست هذه القيم تؤخذ من النظام فهل يؤثر ذلك مع البرنامج إذا نقل إلى جهاز يعمل بالعربية أو بالانجليزية .
2 . لماذا استخدمت الطريقة التي ذكرتها جزاك الله خيراً في التحويل و لم تقسم الثواني على 60 للتحويل إلى دقائق
و كذلك الدقائق إلى ساعات ؟
أما ما دون ذلك فهو واضح و مفهوم جزاك الله خيراً
و الطريقة نفعت معي .

السلام عليكم ورحمة الله وبركاته
اولا ليس هناك اي فرق في الصيغة العربية او الانجليزية بالنسبة للدالة فهي مخزن بها كل الصيغ لكي تعمل على اي جهاز
ولكن كل ما قصدته انه يجب الانتباه الى ادخالها مع الوقت حتى تتعرف عليها الدالة وتعطي نتائج سليمة وهذا بالطبع لأنك تعمل بنظام 12 ساعة
ثانيا:
لماذا لم استخدم القسمة ؟
لأن علية القسمة على 60 ستتطلب مجهود اكبر
حيث ان الناتج ربما يكون به كسور وهنا سيجب تحويل العدد الصحيح الناتج وقصمته ايضا على 60 مرة اخرى حتى نصل الى ان العدد الصحيح أكبرمن\يساوي 60 وبعدها نعتبر الكسور ماهي الاى دقائق
ستكون المسألة طويلة ومعقدة
اما هذه الطريقة فهي ستكون اسرع في التنفيذ وتؤدي الغرض حيث انني اعتمدت على أن
الثواني تنمو لكي تكون دقائق والدقائق الى ساعات
ولهذا اعتمدت على ايجاد الفرق بالثواني حتى استطيع البدء معها من البداية
طبعا كما تعرف ان الهدف يمكن تحقيقه بوسائل وطرق متعددة المهم اختيار الطريقة الاسهل والاسرع
تمنياتي بالتوفيق ولو عندك اي اسئلة ياريت تكتبها علشان نستفيد أكتر :)
==========
الى اللقاء
JusT LeT YouR MinD WorK
MR^King كتب:تمنياتي بالتوفيق ولو عندك اي اسئلة ياريت تكتبها علشان نستفيد أكتر :)==========
الى اللقاء
جزااك الله كل خيرا و بارك الله فيك على مجهودك

هذا الموضوع مغلق.