Merhaba,
Aşağıdaki gibi bir kod ile istediğinizi elde edebilirsiniz.
Kod: Tümünü seç
uses
DateUtils;
function GetDateDifferenceInNumbers(const Date1, Date2: TDateTime): string;
function GetMin(const Val1, Val2: Double): Double;
begin
if Val1 < Val2 then Exit(Val1) else Exit(Val2);
end;
function GetMax(const Val1, Val2: Double): Double;
begin
if Val1 > Val2 then Exit(Val1) else Exit(Val2);
end;
var
MinDate: TDateTime;
MaxDate: TDateTime;
Years: Integer;
Months: Integer;
Days: Integer;
Hours: Integer;
Minutes: Integer;
Seconds: Integer;
begin
if Date1 = Date2 then Exit('0');
MinDate := GetMin(Date1, Date2);
MaxDate := GetMax(Date1, Date2);
Years := YearsBetween(MinDate, MaxDate);
if Years > 0 then MinDate := IncYear(MinDate, Years);
Months := MonthsBetween(MaxDate, MinDate);
if Months > 0 then MinDate := IncMonth(MinDate, Months);
Days := DaysBetween(MaxDate, MinDate);
if Days > 0 then MinDate := IncDay(MinDate, Days);
Hours := HoursBetween(MinDate, MaxDate);
if Hours > 0 then MinDate := IncHour(MinDate, Hours);
Minutes := MinutesBetween(MaxDate, MinDate);
if Minutes > 0 then MinDate := IncMinute(MinDate, Minutes);
Seconds := SecondsBetween(MaxDate, MinDate);
Result := EmptyStr;
if Years > 0 then Result := Years.ToString() + ' YIL';
if Months > 0 then Result := Result + ' ' + Months.ToString() + ' AY';
if Days > 0 then Result := Result + ' ' + Days.ToString() + ' GÜN';
if Hours > 0 then Result := Result + ' ' + Hours.ToString() + ' SAAT';
if Minutes > 0 then Result := Result + ' ' + Minutes.ToString() + ' DAKİKA';
if Seconds > 0 then Result := Result + ' ' + Seconds.ToString() + ' SANİYE';
end;
Kod özellikle kendi GetMin() ve GetMax() fonksiyonlarını kullanıyor. Böylece iki fonksiyon için EXE boyutunu büyütecek Math ünitesini uses kısmına eklemeye gerek kalmamış oluyor.
Örnek fonksiyonun kullanımı aşağıdaki gibi olacaktır
Kod: Tümünü seç
ShowMessage(GetDateDifferenceInNumbers(EncodeDateTime(2010, 01, 01, 11, 05, 47, 0),
EncodeDateTime(2017, 12, 30, 16, 51, 14, 0)));
Gelen cevap ise aşağıdaki gibi olacaktır
Kod: Tümünü seç
7 YIL 11 AY 29 GÜN 5 SAAT 45 DAKİKA 27 SANİYE
Tarihler arası fark hesaplayan fonksiyonların tamamı parametre sırası gözetmez. Başka bir deyişle önce büyük tarih veya önce küçük tarih diye bir sıralaması yoktur.
Fonksiyon doğruluğunu aşağıdaki bağlantıyı kullanarak test edebilirsiniz.
https://www.timeanddate.com/date/durati ... 2=05&s2=47