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

الفرق بين زمنين

مغلق
بدأه KSB في 29 مارس 2005 · 5 رد · 1,671 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكن حساب الفرق بين تاريخين مثلا:

x=10/2/2005 10:15

y=12/2/2005 09:15

بحيث يكون التاتج y-x= 47h

#2

الاخ ksb

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

على العموم إذا اردت الفرق بين تاريخين لابد من تحويل التاريخ إلى ايام عن طريق المعادلة التالية

المعادلة.........التاريخ = (اليوم + (الشهر * 31) + ( السنة * 365)) ... الناتج هو عبارة عن عدد الايام لهذه السنة

التاريخ الثاني - التاريخ الاول = الفرق بين التاريخين

ولتحويل الناتج إلى تاريخ عن طريق المعادلة التالية

لنفرض أن الناتج هو عبارة عن : x =731857 ولارجاع الرقم هذا الى تاريخ نتبع الخطوات التالية

1- res = x /365 ----------- res = 2005.0876712328767123287671232877

2- years = trunc(res) ----------- years = 2005

3- def_month = res - years --------------- years = 0.0876712328767123287671232877

4- mon = def_years * 12 --------------- mon = 1.0520547945205479452054794520548

5- month = trunc(mon) ------------- month = 1

6- def_day = mon-month ------------------- def_day = 0.0520547945205479452054794520548

7- day = round(def_day * 31) day = 1

#3

مشكور اخوي ما قصرت، بس اللي اقصده هو الفرق بالساعات اي كم ساعة فرق بين الزمن الاول والزمن الثاني

#4

اخي الكريم ....

الفرق بين الزمنين نفس فكرة التاريخ ولكن تحسب بالوقت ....... المعنى ولك المثال التالي .......

لحساب التاريخ

str_dd := substr('10/12/2005',1,2);  = 10
str_mm := substr('10/12/2005',4,2);  = 12
str_yy := substr('10/12/2005',7,4);   = 2005

str_date_day := (str_yy * 365) + (str_mm * 30) + str_dd;
-------------------------------------------------------------------------------------- 	 
end_dd := substr('12/2/2005',1,2);   = 12
end_mm := substr('12/2/2005',4,2);   = 2
end_yy := substr('12/2/2005',7,4);    = 2005

end_date_day := (end_yy * 365) + (end_mm * 30) + end_dd;
-------------------------------------------------------------------------------------
لحساب الوقت

substr_str_time_hh := substr('10:15',1,2);
substr_str_time_mi := substr('10:15',4,5);

str_time_min := (substr_str_time_hh * 60) + substr_str_time_mi;
--------------------------------------------------------------------------------------------
substr_end_time_hh := substr('09:15',1,2);
substr_end_time_mi := substr('09:15',4,5);

end_time_min := (substr_end_time_hh * 60) + substr_end_time_mi;
-----------------------------------------------------------------------------------------------
def_time     := end_time_min - str_time_min;
********************************************************************
def_end_str_date  := end_date_day - str_date_day;
def_end_str_hours := ((def_end_str_date * 24) * 60);

--------------------------------------------------------------------
total_day_hour := def_end_str_hours + def_time;
dev_day_hour  := total_day_hour / 60;
dev_day_hh      := trunc(dev_day_hour);
dev_day_mi1    := dev_day_hour - dev_day_hh;
dev_day_mi      := dev_day_mi1 * 60;
total_hours       := DEV_DAY_HH;
total_minit         :=  dev_day_mi;

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

وبالتوفيق،،،،

تم تعديل هذه المشاركة بواسطة walcom في 31 مارس 2005 في 18:36

#5

مشكور اخوي ما قصرت جزاك الله خير هذا اللي كنت احتاجه :D

#6

الاخ العزيز

اسهل وابسط طريقة لمقارنة التاريخ هي ان تقوم بطرح تاريخ من تاريخ والنتيجة تكون بالايام ويمكن ضرب النتيجة * 24 للتحول الى ساعات وكذلك تحويلها الدقائق وهكذا.

مثال:

select sysdate-hiredate from emp;

اي ان نطرح تاريخ التعيين من تاريخ اليوم وتكون النتيجة فرق بالايام ويمكن ضربها *24 للتتحول الى ساعات وكما يلي :

select (sysdate-hiredate)*24 from emp ;

مع التقدير

علي البدري

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

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