Recent

Author Topic: سؤال حول دوال التاريخ  (Read 3106 times)

Al-Eid

  • Jr. Member
  • **
  • Posts: 75
سؤال حول دوال التاريخ
« on: January 21, 2023, 11:30:26 am »

السلام عليكم

هل توجد دالة تعمل مثل الدالة DaysBetween ولكن مع إمكانية عدم حساب أيام نهاية أيام الأسبوع أو أيام محددة

Zaher

  • Hero Member
  • *****
  • Posts: 679
    • parmaja.org
Re: سؤال حول دوال التاريخ
« Reply #1 on: January 21, 2023, 11:36:36 am »
اتذكر لا يوجد و قمت بزماني بعمل واحد على يدي ، هو مهم في برامج احتساب الرواتب و الاجور، لاستثناء ايام الاجازات
قمت بعمل مسح لكل الايام و عدها

Al-Eid

  • Jr. Member
  • **
  • Posts: 75
Re: سؤال حول دوال التاريخ
« Reply #2 on: January 21, 2023, 04:26:47 pm »

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



Code: Pascal  [Select][+][-]
  1. function BusinessDaysBetween(const FirstDate, SecondDate: TDateTime): Integer;
  2. var
  3.   CurrDate : TDateTime;
  4.   StartDate, EndDate: TDateTime;
  5. begin
  6.   if SecondDate > FirstDate then
  7.   begin
  8.     StartDate := FirstDate;
  9.     EndDate := SecondDate;
  10.   end
  11.   else
  12.   begin
  13.     StartDate := SecondDate;
  14.     EndDate := FirstDate;
  15.   end;
  16.  
  17.   CurrDate := StartDate;
  18.   Result := 0;
  19.  
  20.   while (CurrDate <= EndDate) do
  21.   begin
  22.     if DayOfTheWeek(CurrDate) < 6 then
  23.       Inc(Result);
  24.     CurrDate := CurrDate + 1;
  25.   end;
  26. end;
  27.  
  28.  

Zaher

  • Hero Member
  • *****
  • Posts: 679
    • parmaja.org
Re: سؤال حول دوال التاريخ
« Reply #3 on: January 21, 2023, 05:40:44 pm »
الكود يحسب عدد الايام عدا ايام السبت والأحد،
للتوضيح قمت باختصاره لك وتوضيح لا يساوي رقم 5 بدل من أصغر من 6، في حال اردت استبداله بيوم الجمعة الذي رقمه 5

Code: Pascal  [Select][+][-]
  1. function BusinessDaysBetween(const FirstDate, SecondDate: TDateTime): Integer;
  2. begin
  3.   Result := 0;
  4.   while (FirstDate <= SecondDate) do
  5.   begin
  6.     if DayOfTheWeek(FirstDate) <> 5 then // 5 is Friday
  7.       Inc(Result);
  8.     FirstDate := FirstDate + 1;
  9.   end;
  10. end;
  11.  

Al-Eid

  • Jr. Member
  • **
  • Posts: 75
Re: سؤال حول دوال التاريخ
« Reply #4 on: January 22, 2023, 11:02:53 am »
حسب ردك هذا فإن الدالة جيدة وهذا ما كنت أريد أن أعرفه
مع العلم أني لم أنتبه في البداية بمشكل أرقام الأبام
بارك الله فيك

KodeZwerg

  • Hero Member
  • *****
  • Posts: 2007
  • Fifty shades of code.
    • Delphi & FreePascal
Re: سؤال حول دوال التاريخ
« Reply #5 on: February 18, 2023, 12:05:30 am »
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   FS: TFormatSettings;
  4.   d1, d2: TDateTime;
  5. begin
  6.   d1 := EncodeDateTime(2021, 01, 01, 00, 00, 01, 0001);
  7.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  8.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  9.   d1 := EncodeDateTime(2021, 02, 01, 00, 00, 01, 0001);
  10.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  11.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  12.   d1 := EncodeDateTime(2021, 03, 01, 00, 00, 01, 0001);
  13.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  14.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  15.   d1 := EncodeDateTime(2021, 04, 01, 00, 00, 01, 0001);
  16.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  17.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  18.   d1 := EncodeDateTime(2021, 05, 01, 00, 00, 01, 0001);
  19.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  20.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  21.   d1 := EncodeDateTime(2021, 06, 01, 00, 00, 01, 0001);
  22.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  23.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  24.   d1 := EncodeDateTime(2021, 07, 01, 00, 00, 01, 0001);
  25.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  26.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  27.   d1 := EncodeDateTime(2021, 08, 01, 00, 00, 01, 0001);
  28.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  29.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  30.   d1 := EncodeDateTime(2021, 09, 01, 00, 00, 01, 0001);
  31.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  32.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  33.   d1 := EncodeDateTime(2021, 10, 01, 00, 00, 01, 0001);
  34.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  35.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  36.   d1 := EncodeDateTime(2021, 11, 01, 00, 00, 01, 0001);
  37.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  38.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  39.   d1 := EncodeDateTime(2021, 12, 01, 00, 00, 01, 0001);
  40.   d2 := EncodeDateTime(2021, 12, 31, 00, 00, 01, 0001);
  41.   Memo1.Lines.Add('From: ' + DateToStr(d1) + ' To: ' + DateToStr(d2) + ' is ' + IntToStr(MonthsBetween(d1, d2, True)));
  42. end;
Quote
From: 01.01.2021 To: 31.12.2021 is 11
From: 01.02.2021 To: 31.12.2021 is 10
From: 01.03.2021 To: 31.12.2021 is 9
From: 01.04.2021 To: 31.12.2021 is 8
From: 01.05.2021 To: 31.12.2021 is 7
From: 01.06.2021 To: 31.12.2021 is 6
From: 01.07.2021 To: 31.12.2021 is 5
From: 01.08.2021 To: 31.12.2021 is 4
From: 01.09.2021 To: 31.12.2021 is 3
From: 01.10.2021 To: 31.12.2021 is 2
From: 01.11.2021 To: 31.12.2021 is 1
From: 01.12.2021 To: 31.12.2021 is 0
(Dates are display german encoded, on your system it is shown differently.)
(يتم عرض التواريخ بترميز ألماني ، وتظهر على نظامك بشكل مختلف.)
« Last Edit: Tomorrow at 31:76:97 xm by KodeZwerg »

 

TinyPortal © 2005-2018