الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار عن كيفية الحصول على الفرق بين توقيتين

مغلق
بدأه COMFORT في 28 يوليو 2006 · 7 رد · 1,717 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخواني الكرام كيف يمكن الحصول على الفرق بين توقيتين

هل هناك دالة لعمل ذلك مثل الدالة DateDiff خاصة بالتعامل مع التوقيت

و جزاكم الله خيراً .

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#2

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

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

جرب الكود التالي

 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

#3

واضح جداً جزاك الله كل خير

تم تعديل هذه المشاركة بواسطة COMFORT في 28 يوليو 2006 في 22:42

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#4

أخي الكريم 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 دقائق .

هل هذا يخص تحديد إن كان التوقيت صباحاً أم مساءً ؟ أعتقد ذلك

هذا مثال مرفق لما واجهت .

أتمنى أن أكون قد وضحت المشكلة و أتمنى أن تفيدنا بالحل و جزاك الله خيراً .

Problem.rar

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#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

فائدة السطرين السابقين هي :

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

-----------------------

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

أتمنى اكون وفقت في شرح الفكرة ولو هناك اي مشكلة اكتبها ونحاول نحلها ان شاء الله

تمنياتي بالتوفيق :)

=======================

الى اللقاء

ProblemSolved.rar

تم تعديل هذه المشاركة بواسطة MR^King في 1 أغسطس 2006 في 15:07

JusT LeT YouR MinD WorK

#6

أخي Mr^King

الرد واضح و و افي

لكن عندي بعض الاستفسارات

1. هل يوجد فرق بين الصيغة العربية و الانجليزية من حيث تحديد نوع التوقيت [(ص ، م) أو (AM , PM)]

أليست هذه القيم تؤخذ من النظام فهل يؤثر ذلك مع البرنامج إذا نقل إلى جهاز يعمل بالعربية أو بالانجليزية .

2 . لماذا استخدمت الطريقة التي ذكرتها جزاك الله خيراً في التحويل و لم تقسم الثواني على 60 للتحويل إلى دقائق

و كذلك الدقائق إلى ساعات ؟

أما ما دون ذلك فهو واضح و مفهوم جزاك الله خيراً

و الطريقة نفعت معي .

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#7

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

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

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

ثانيا:

لماذا لم استخدم القسمة ؟

لأن علية القسمة على 60 ستتطلب مجهود اكبر

حيث ان الناتج ربما يكون به كسور وهنا سيجب تحويل العدد الصحيح الناتج وقصمته ايضا على 60 مرة اخرى حتى نصل الى ان العدد الصحيح أكبرمن\يساوي 60 وبعدها نعتبر الكسور ماهي الاى دقائق

ستكون المسألة طويلة ومعقدة

اما هذه الطريقة فهي ستكون اسرع في التنفيذ وتؤدي الغرض حيث انني اعتمدت على أن

الثواني تنمو لكي تكون دقائق والدقائق الى ساعات

ولهذا اعتمدت على ايجاد الفرق بالثواني حتى استطيع البدء معها من البداية

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

تمنياتي بالتوفيق ولو عندك اي اسئلة ياريت تكتبها علشان نستفيد أكتر :)

==========

الى اللقاء

JusT LeT YouR MinD WorK

#8
MR^King كتب:
تمنياتي بالتوفيق ولو عندك اي اسئلة ياريت تكتبها علشان نستفيد أكتر :)

==========

الى اللقاء

جزااك الله كل خيرا و بارك الله فيك على مجهودك

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif

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

مواضيع مشابهة