العمليات الحسابية على التاريخ والوقت
#1
السلام عليكم

ما هي طريقة معرفة عدد الساعات والأيام بين وقتين مثلاً
11:30:00 م 20/5/2013 - 10:15:00 ص 19/5/2013
طبعا تعليمات تجزئة التاريخ والوقت وفصلهم عندي لكن بالنسبة للفرق بينهم النتائج تحتاج عمليات كتي
هل من طريقة بسيطة ؟
الرد
#2
وعليكم السلام ورحمة الله تعالى وبركاته.
كود :
procedure TForm1.Button3Click(Sender: TObject); var Date1, Date2, DateD : TDateTime; HH, MM, SS, MS: Word; begin Date1 := StrToDateTime('21/02/2010 04:32:50'); Date2 := now; DateD := Date2 - Date1; DecodeTime(DateD , HH, MM, SS, MS); HH := HH + (24 * Round(DateD )); Showmessage('الفرق بين التاريخين هو : ' + inttostr(HH) + 'ساعة ' + inttostr(MM) + ' دقيقة'+ inttostr(SS) +' ثانية '+ inttostr(MS)+' جزئ من الألف '); end;
الرد
#3
جزاك الله خيرا استاذنا بن دهبية

هل يمكن ان توضح لي تفضلا منكم هذه النقاط
كود :
Date1 := StrToDateTime('21/02/2010 04:32:50'); Date2 := now;
هنا Date2 تعطي تاريخا فقط على حسب علمي ، فكيف يتم الطرح من الوقت؟

وهنا
كود :
HH := HH + (24 * Round(DateD ));
ما القيمة الاولية ل HH حتى يتم الاضافة اليه مع انك لم تعرفه من قبل

وبارك الله فيكم
الرد
#4
جزاك الله خيرا.
تفضل الشرح:
كود :
begin Date1 := StrToDateTime('21/02/2010 04:32:50');//تحويل سلسلة حرف الى تاريخ ووقت Date2 := now;//التاريخ والوقت الحالي DateD := Date2 - Date1;//الفرق بين التاريخين HHقيمة الابتدائية فى السطر التالى لـ DecodeTime(DateD , HH, MM, SS, MS);// تفكيك الوقت الناتج عن الفرق بين التاريخين الى ساعة,دقيقة,ثانية,جزئ من الألف. HH := HH + (24 * Round(DateD ));//الساعات الناتجة عن الفرق + تحويل الايام الى ساعات بدون أخذ الوقت بعد الفاصلة Showmessage('الفرق بين التاريخين هو : ' + inttostr(HH) + 'ساعة ' + inttostr(MM) + ' دقيقة'+ inttostr(SS) +' ثانية '+ inttostr(MS)+' جزئ من الألف '); end;
الرد
#5
شكراً والله يجزيك الخير
بصراحة كنت استخدم الأمر HourSpan وأقوم بتحويلات كتيرة حتى اصل للصيغة HH:MM:SS
شكراً جزيلا والله يجزيك الخير
الرد
#6
جزاك الله خيرا استاذنا الكريم بن ذهبية ، الحق أني غفلت عن دالة التحويل الى تاريخ ووقت فلم انتبه لها وكان سؤالي السابق فالعذر منكم
غير ان شرحكم طيب ومفيد فلك خالص الشكر

وأود ان اتعلم دالة HourSpan لعلي احتاجها في البرمجة ان لم يكن هناك مانع من استاذ الكريم
الرد
#7
السلام عليكم بعد تجربة الكود الموضوع لاحظت وجود خطأ في النتيجة بالنسبة لليوم الأول في عدد الساعات

ولذلك قمت ببعض التعديل البسيط في هذا الجزء

كود :
حيث حذفت هذا القسم HH := HH + (24 * Round(DateD )) وأضفت القسم التالي طبعا هنا يجب إضافة تعريف لـ dd بقيمة Word dd:=DaysBetween(Date1, Date2); if dd >= 1 then HH := HH + dd*24;

طبعاً في حال كان لدي خطأ ما ****ا التصحيح وشكراا
الرد
#8
عبد الهادي كتب :جزاك الله خيرا استاذنا الكريم بن ذهبية ، الحق أني غفلت عن دالة التحويل الى تاريخ ووقت فلم انتبه لها وكان سؤالي السابق فالعذر منكم
غير ان شرحكم طيب ومفيد فلك خالص الشكر

وأود ان اتعلم دالة hourspan لعلي احتاجها في البرمجة ان لم يكن هناك مانع من استاذ الكريم

بالنسبة لهذه التعليمة تعطينا عدد النتيجة بين التاريخين والوقتين بالساعات
مثلاً 254.9 وهنا علينا القيام بالتحويل للحصول على عدد الأيام أو عدد الدقائق وذل بالتعامل مع 0.9 للحصول على عدد الدقائق ومع 254 للحصول على عدد الأيام وعدد الساعات
0.9*60= عدد الدقائق

254/24=عدد الأيام والساعات

بصراحة هنا أنت بحاجة للتعامل مع الأرقام القسم العشري بشكل منفصل عن القسم الصحيح لو عندك تعليمة تفيدني بفصل القسمين عن بعض أكون لك من الشاكرين
توجد التعليمة floattodecimal لكني لم أجد التعامل معها بصراحة أنا عم أتحايل عليها بالتعامل مع الرقم كنص والبحث عن "." وفصل الرقمين
الرد
#9
السلام عليكم ورحمة الله تعالى وبركاته.
جزاكم الله خيرا
إقتباس :السلام عليكم بعد تجربة الكود الموضوع لاحظت وجود خطأ في النتيجة بالنسبة لليوم الأول في عدد الساعات
لقد جربته ولم الحظ أي خطأ . ربما عكست التارخين.

إقتباس :بصراحة هنا أنت بحاجة للتعامل مع الأرقام القسم العشري بشكل منفصل عن القسم الصحيح لو عندك تعليمة تفيدني بفصل القسمين عن بعض أكون لك من الشاكرين

صرح بالوحدة
كود :
uses Math;

استخدم
كود :
Floor(254.9)

لاجاد 254 العدد الصحيح

و
كود :
254.9-Floor(254.9);
لاجاد 0.9 العدد بعد الفاصلة
الرد
#10
بن دهيبة كتب :لقد جربته ولم الحظ أي خطأ . ربما عكست التارخين.
الخطأ تحديداً بالنسبة لليوم الأول
عندما يكون الفرق بين التاريخين أقل من 24 ساعة التعليمة السابقة تعطي قيمة 24 ساعة إضافية مثلا الفرق هو 23:50 تعطي 47:50 والسبب أن قيمة hh تتضمن 23 ساعة ووفق التعليمة الموجودة سيتم إضافة 24 ساعة أخرى لأن أمر التقريب هو للأعلى يعني 0.95 وفق أمر التقريب تصبح 1 *24 +hh مما يعطي خطأ بالنسبة لليوم الأول فقط
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم