كيف يمكن حساب الفرق بين تاريخين مثلا:
x=10/2/2005 10:15
y=12/2/2005 09:15
بحيث يكون التاتج y-x= 47h
كيف يمكن حساب الفرق بين تاريخين مثلا:
x=10/2/2005 10:15
y=12/2/2005 09:15
بحيث يكون التاتج y-x= 47h
الاخ 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
مشكور اخوي ما قصرت، بس اللي اقصده هو الفرق بالساعات اي كم ساعة فرق بين الزمن الاول والزمن الثاني
اخي الكريم ....
الفرق بين الزمنين نفس فكرة التاريخ ولكن تحسب بالوقت ....... المعنى ولك المثال التالي .......
لحساب التاريخ
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
مشكور اخوي ما قصرت جزاك الله خير هذا اللي كنت احتاجه :D
الاخ العزيز
اسهل وابسط طريقة لمقارنة التاريخ هي ان تقوم بطرح تاريخ من تاريخ والنتيجة تكون بالايام ويمكن ضرب النتيجة * 24 للتحول الى ساعات وكذلك تحويلها الدقائق وهكذا.
مثال:
select sysdate-hiredate from emp;
اي ان نطرح تاريخ التعيين من تاريخ اليوم وتكون النتيجة فرق بالايام ويمكن ضربها *24 للتتحول الى ساعات وكما يلي :
select (sysdate-hiredate)*24 from emp ;
مع التقدير
علي البدري
هذا الموضوع مغلق.