السلام عليكم
قبل أن تحكم جرب جميع الحالات الممكنة، ثم راجع القواعد التي ذكرتها وقارنها مع الكود
سأحاول أن أشرح ما كتبته:
لدينا: وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
أي إذا كانت بداية المهمة أصغر تماما (إذا جاء قبل) من وقت انتهاء فترة وجبة العذاء يكون له الحق في وجبة
و إذا كانت نهاية المهمة أكبر أو تساوي (إذا وجد بعد) وقت بداية فترة وجبة الغذاء يكون له الحق في وجبة
لدينا: وجبة العشاء تبدأ من الساعة 18:00 وتنتهي على الساعة 21:00
أي إذا كانت بداية المهمة أصغر تماما (إذا جاء قبل) من وقت انتهاء فترة وجبة العشاء يكون له الحق في وجبة
و إذا كانت نهاية المهمة أكبر أو تساوي (إذا وجد بعد) وقت بداية فترة وجبة العشاء يكون له الحق في وجبة
لدينا: المبيت يبدأ من الساعة 00:00 وينتهي على الساعة 05:00
أي إذا كانت بداية المهمة أصغر تماما (إذا جاء قبل) من وقت انتهاء فترة المبيت يكون له الحق في المبيت
و إذا كانت نهاية المهمة أكبر أو تساوي (إذا وجد بعد) وقت بداية فترة المبيت يكون له الحق المبيت
وهناك أمر آخر عليك أن تدركه وهو أنك عندما تقوم بالآتي : ('t1:=strtotime('11:00:00
النتيجة تكون وقت يوم 30/12/1899 (البداية التي يحسب بها النظام) لأن الاوقات تحول إلى أرقام (Double) أي النتيجة تكون مختلفة عن الوقت 11:00 ليوم 09/07/2008
ملاحظة : لتتأكد قم بالأتي :
وعليه t1 دائما أصغر
الحل هو العمل مع DecodeDate و EncodeDateTime أنظر السورس ثم انظر Help الخاص بالدلفي
هذه الطريقة في نظري أحسن و أثبت
قد اكون مخطئا .. لكن ما يهمني ان النتائج تطابقت مع ما ذكرته سابقا
أي شيء آخر فيعود لك و كيف وصفته
بالتوفيق و ننتظر النتيجة
قبل أن تحكم جرب جميع الحالات الممكنة، ثم راجع القواعد التي ذكرتها وقارنها مع الكود
سأحاول أن أشرح ما كتبته:
لدينا: وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
أي إذا كانت بداية المهمة أصغر تماما (إذا جاء قبل) من وقت انتهاء فترة وجبة العذاء يكون له الحق في وجبة
و إذا كانت نهاية المهمة أكبر أو تساوي (إذا وجد بعد) وقت بداية فترة وجبة الغذاء يكون له الحق في وجبة
لدينا: وجبة العشاء تبدأ من الساعة 18:00 وتنتهي على الساعة 21:00
أي إذا كانت بداية المهمة أصغر تماما (إذا جاء قبل) من وقت انتهاء فترة وجبة العشاء يكون له الحق في وجبة
و إذا كانت نهاية المهمة أكبر أو تساوي (إذا وجد بعد) وقت بداية فترة وجبة العشاء يكون له الحق في وجبة
لدينا: المبيت يبدأ من الساعة 00:00 وينتهي على الساعة 05:00
أي إذا كانت بداية المهمة أصغر تماما (إذا جاء قبل) من وقت انتهاء فترة المبيت يكون له الحق في المبيت
و إذا كانت نهاية المهمة أكبر أو تساوي (إذا وجد بعد) وقت بداية فترة المبيت يكون له الحق المبيت
وهناك أمر آخر عليك أن تدركه وهو أنك عندما تقوم بالآتي : ('t1:=strtotime('11:00:00
النتيجة تكون وقت يوم 30/12/1899 (البداية التي يحسب بها النظام) لأن الاوقات تحول إلى أرقام (Double) أي النتيجة تكون مختلفة عن الوقت 11:00 ليوم 09/07/2008
ملاحظة : لتتأكد قم بالأتي :
كود :
uses . . . . ,DateUtils ;
. . . . . .
procedure TForm1.Button1Click(Sender: TObject);
var t1:TDatetime;
V: double;
S: string;
AYear,AMonth,Aday: word;
begin
t1:=strtotime('11:00:00');
label1.Caption := datetostr(t1);
V:=t1;
Str(V:0:8, s);
label2.caption:=S;
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,11,00,00,00) ;
label3.Caption := datetostr(t1);
V:=t1;
Str(V:0:8, s);
label4.caption:=S;
end;وعليه t1 دائما أصغر
الحل هو العمل مع DecodeDate و EncodeDateTime أنظر السورس ثم انظر Help الخاص بالدلفي
هذه الطريقة في نظري أحسن و أثبت
كود :
Uses . . . .
DateUtils ;
. . . . . . . . . . .
procedure TForm1.Button1Click(Sender: Tobject) ;
var t1,t2: TdateTime ;
i,j: integer ;
AYear,AMonth,ADay: word ;
begin
[color=Blue]// عدد الأيام[/color]
i:=DaysBetween(DateTimePicker1.date,DateTimePicker2.date) ;
[color=Blue]// نتأكد من أنها نفس اليوم بالنسبة ليوم الوقت [/color]
DateTimePicker3.Date:=DateTimePicker1.Date;
DateTimePicker4.Date:=DateTimePicker2.Date;
[color=Blue]// بداية حساب عدد وجبات الغذاء [/color]
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,14,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday, 11,01,00,0) ;
j:=0 ;
if (DateTimePicker3.Time<t1) then
j:=j+1 ;
if DateTimePicker4.Time>=t2 then
j:=j+1 ;
dbedit5.text:=inttostr(i-1+j) ;
[color=Blue]// بداية حساب عدد وجبات العشاء[/color]
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday , 21,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday,18,00,00,00) ;
j:=0;
if (DateTimePicker3.Time<t1) then
j:=j+1;
if DateTimePicker4.Time>=t2 then
j:=j+1;
dbedit6.text:=inttostr(i-1+j) ;
[color=Blue]// بداية حساب عدد مرات المبيت[/color]
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,05,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday, 00,00,00,00) ;
j:=0 ;
if (DateTimePicker3.Time<t1) then
j:=j+1 ;
if (DateTimePicker4.Time>t2) then
j:=j+1 ;
dbedit7.text:=inttostr(i-1+j) ;
end ;قد اكون مخطئا .. لكن ما يهمني ان النتائج تطابقت مع ما ذكرته سابقا
أي شيء آخر فيعود لك و كيف وصفته
بالتوفيق و ننتظر النتيجة

