10-02-2025, Saat: 19:00
Selamlar
Başlığı tam olarak nasıl vereceğimi bilemedim kusura bakmayın.
bugün aşağıdaki fonksiyona ihtiyaç duydum belki başkasının da ilerde işine yarar diye buraya ekliyorum.
Bu fonksiyon basitce yaptığı iş ekrandan girilen 2 tarih aralığındaki veriyi belirtilen periyodlarda parçalıyor.
Dinamik bir dizi döndürüyor.
Örneğin 01.02.2025 - 12.03.2025 tarihleri arasında 7 günlük periyod da
istediğiniz başlangıç ve bitiş tarihlerini size dönüyor.
Fonksiyon
Kullanım Örneği
Başlığı tam olarak nasıl vereceğimi bilemedim kusura bakmayın.
bugün aşağıdaki fonksiyona ihtiyaç duydum belki başkasının da ilerde işine yarar diye buraya ekliyorum.
Bu fonksiyon basitce yaptığı iş ekrandan girilen 2 tarih aralığındaki veriyi belirtilen periyodlarda parçalıyor.
Dinamik bir dizi döndürüyor.
Örneğin 01.02.2025 - 12.03.2025 tarihleri arasında 7 günlük periyod da
istediğiniz başlangıç ve bitiş tarihlerini size dönüyor.
Fonksiyon
type TDateRange = record Baslangic: TDate; Bitis: TDate; end; TDateRangeArray = TArray<TDateRange>; . . . . . . . . . . function TForm1.fn_TarihArray(const _pBasTarih, _pBitTarih:TDate; _pPeriyod:Integer):TDateRangeArray; var orjIlkTarih, orjSonTarih, dBasTarih, dBitTarih: TDate; iGunFarki: Integer; bIlk: Boolean; iCount : Integer; begin SetLength(Result, 0); // Dinamik dizi oluşturuluyor if _pPeriyod <= 0 then exit; if _pBitTarih < _pBasTarih then exit; // Kullanıcının gönderdiği tarihleri kaydet orjIlkTarih := _pBasTarih; orjSonTarih := _pBitTarih; iGunFarki := DaysBetween(orjIlkTarih, orjSonTarih); // İlk ayarlar bIlk := True; dBasTarih := orjIlkTarih; // Eğer gün farkı _pPeriyod dan küçükse, bitiş tarihini son tarihe eşitle if iGunFarki >= _pPeriyod then dBitTarih := dBasTarih + (_pPeriyod - 1) else dBitTarih := orjSonTarih; // Döngü her durumda en az 1 kez çalışacak repeat if bIlk then bIlk := False else begin // Sonraki periyotlarda _pPeriyod kadar kaydırma yap dBasTarih := dBasTarih + _pPeriyod; dBitTarih := Min(dBitTarih + _pPeriyod, orjSonTarih); end; //Eldeki tarihleri diziye doldur iCount := Length(Result); SetLength(Result, iCount + 1); Result[iCount].Baslangic := dBasTarih; Result[iCount].Bitis := dBitTarih; until dBitTarih >= orjSonTarih; end;
Kullanım Örneği
procedure TForm1.btnTestClick(Sender: TObject);
var
DateRangeArray : TArray<TDateRange>;
i : Integer;
begin
ListBox1.Items.Clear;
ListBox1.Items.Add('Başladı : ' + DateToStr(dtFaturaBaslangicTarihi.Date) + ' - ' + DateToStr(dtFaturaBitisTarihi.Date));
DateRangeArray := fn_TarihArray(dtFaturaBaslangicTarihi.Date, dtFaturaBitisTarihi.Date, SEPeriyod.Value);
for I := 0 to Length(DateRangeArray) - 1 do
begin
ListBox1.Items.Add('Array[' + IntToStr(I) + '] -> ' + DateToStr(DateRangeArray[I].Baslangic) + ' - ' + DateToStr(DateRangeArray[I].Bitis));
end;
ListBox1.Items.Add('Bitti : ' + DateToStr(dtFaturaBaslangicTarihi.Date) + ' - ' + DateToStr(dtFaturaBitisTarihi.Date));
end;
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz.


