(17-08-2023, Saat: 15:38)shooterman Adlı Kullanıcıdan Alıntı: unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, dateutils;
type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
DateTimePicker3: TDateTimePicker;
DateTimePicker4: TDateTimePicker;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i, gun : integer;
begin
gun := DaysBetween(DateTimePicker1.date, DateTimePicker3.date);
for I := 1 to gun do
memo1.lines.Add(datetostr(datetimepicker1.Date + i));
end;
end.
(17-08-2023, Saat: 15:38)shooterman Adlı Kullanıcıdan Alıntı: unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, dateutils;
type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
DateTimePicker3: TDateTimePicker;
DateTimePicker4: TDateTimePicker;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i, gun : integer;
begin
gun := DaysBetween(DateTimePicker1.date, DateTimePicker3.date);
for I := 1 to gun do
memo1.lines.Add(datetostr(datetimepicker1.Date + i));
end;
end.
Saatleri koymadım bir de yazılar. Sen onları da memoadd stringine eklersin. 1 satırlar işlem bitiyor gördüğün üzere
İş bu kadar kolay olsa keşke. While ve forlar ile işi beceremeyince ki kafamı daha fazla yormayıp amelelik yapmayı tercih ettim. Aşağıdaki kodu çalıştırdığınızda tam da istediğim sonucu alıyorum
Ama kesinlikle doğru yöntem değil, daha basit yolu muhakkak olmalı.
procedure TForm1.Button3Click(Sender: TObject);
var
BaslangicTarihi: TDateTime;
BitisTarihi: TDateTime;
BaslangicSaati: TTime;
BitisSaati: TTime;
Saatler: array of TTime;
Tarih: TDateTime;
Saat: TTime;
i, gun: Integer;
MemoText: string;
vardiya: Integer;
begin
BaslangicTarihi := StartDateEdit.Date;
BitisTarihi := EndDateEdit.Date;
BaslangicSaati := StartTimeEdit.Time;
BitisSaati := EndTimeEdit.Time;
SetLength(Saatler, 3);
gun:=DaysBetween(BitisTarihi,BaslangicTarihi);
if (BaslangicSaati >= EncodeTime(8,0,0,0)) and (BaslangicSaati <= EncodeTime(16,0,0,0)) then
begin
Saatler[0] := EncodeTime(16, 0, 0, 0); // 16:00:00
Saatler[1] := EncodeTime(23, 59, 59, 0); // 00:00:00
Saatler[2] := EncodeTime(8, 0, 0, 0); // 08:00:00
vardiya:=2;
end;
if (BaslangicSaati >= EncodeTime(16,0,0,0)) and (BaslangicSaati <= EncodeTime(23,59,59,0)) then
begin
Saatler[2] := EncodeTime(16, 0, 0, 0); // 16:00:00
Saatler[0] := EncodeTime(23, 59, 59, 0); // 00:00:00
Saatler[1] := EncodeTime(8, 0, 0, 0); // 08:00:00
vardiya:=3;
end;
if (BaslangicSaati >= EncodeTime(0,0,0,0)) and (BaslangicSaati <= EncodeTime(8,0,0,0)) then
begin
Saatler[1] := EncodeTime(16, 0, 0, 0); // 16:00:00
Saatler[2] := EncodeTime(23, 59, 59, 0); // 00:00:00
Saatler[0] := EncodeTime(8, 0, 0, 0); // 08:00:00
vardiya:=1;
end;
Memo1.Clear; // Memonun içeriğini temizle
Tarih := BaslangicTarihi;
Saat := Saatler[0];
if vardiya = 2 then
begin
if (gun=0) and (BitisSaati<=Saat) then // vardiya 2 den bir sonraki vardiyaya sarkmıyorsa
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=0) and (BitisSaati>Saat) then // vardiya 2 den bir sonraki vardiyaya sarkıyorsa
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), TimeToStr(saat), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(Saat), DateToStr(Tarih), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati=StrToTime('00:00:00')) then // bitiş saati 00:00:00 a eşitse
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '16:00:00', DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati>StrToTime('00:00:00')) and (BitisSaati<StrToTime('08:00:00')) then //bitiş saati 1. vardiyada ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '16:00:00', DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati=StrToTime('08:00:00')) then //bitiş saati 08:00:00 a eşitse
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '16:00:00', DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati>StrToTime('08:00:00')) and (BitisSaati<StrToTime('16:00:00')) then //bitiş saati 2. vardiyada ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '16:00:00', DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '08:00:00', DateToStr(Tarih+1), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati=StrToTime('16:00:00')) then //bitiş saati 16:00:00 a eşit ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '16:00:00', DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '08:00:00', DateToStr(Tarih+1), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati>StrToTime('16:00:00')) and (BitisSaati<StrToTime('23:59:59')) then //bitiş saati 3. vardiyada ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '16:00:00', DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '08:00:00', DateToStr(Tarih+1), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '16:00:00', DateToStr(Tarih+1), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
exit;
end;
if vardiya = 3 then
begin
if (gun=0) and (BitisSaati<=Saat) then // vardiya 3 den bir sonraki vardiyaya sarkmıyorsa
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati=StrToTime('00:00:00')) then // bitiş saati 00:00:00 a eşitse
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati>StrToTime('00:00:00')) and (BitisSaati<StrToTime('08:00:00')) then //bitiş saati 1. vardiyada ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '00:00:00', DateToStr(Tarih+1), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati=StrToTime('08:00:00')) then //bitiş saati 08:00:00 a eşitse
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati>StrToTime('08:00:00')) and (BitisSaati<StrToTime('16:00:00')) then //bitiş saati 2. vardiyada ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '08:00:00', DateToStr(Tarih+1), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati=StrToTime('16:00:00')) then //bitiş saati 16:00:00 a eşit ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '08:00:00', DateToStr(Tarih+1), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=1) and (BitisSaati>StrToTime('16:00:00')) and (BitisSaati<StrToTime('23:59:59')) then //bitiş saati 3. vardiyada ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih+1), '00:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya-2;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '00:00:00', DateToStr(Tarih+1), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '08:00:00', DateToStr(Tarih+1), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih+1), '16:00:00', DateToStr(Tarih+1), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
end;
if vardiya = 1 then
begin
if (gun=0) and (BitisSaati<=Saat) then // vardiya 1 den bir sonraki vardiyaya sarkmıyorsa
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=0) and (BitisSaati>StrToTime('08:00:00')) and (BitisSaati<=StrToTime('16:00:00')) then //bitiş saati 2. vardiyada ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '08:00:00', DateToStr(Tarih), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
if (gun=0) and (BitisSaati>StrToTime('16:00:00')) and (BitisSaati<=StrToTime('23:59:59')) then //bitiş saati 3. vardiyada ise
begin
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), TimeToStr(BaslangicSaati), DateToStr(Tarih), '08:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '08:00:00', DateToStr(Tarih), '16:00:00', IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
vardiya:=vardiya+1;
MemoText := Format('"BaslangicTarihi": %s %s, "BitisTarihi": %s %s, "Vardiya": %s',
[DateToStr(Tarih), '16:00:00', DateToStr(Tarih), TimeToStr(BitisSaati), IntToStr(vardiya)]);
Memo1.Lines.Add(MemoText);
end;
end;
end;