Autor Beitrag
SpaghettiCodix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: Do 11.11.10 14:19 
Hallo,

ich möchte gern eine Datumsdifferenz so ausgeben daß ich als Ergebnis sowas erhalte:

bis zum XX.XX.XXXX sind es 2 Jahre 4 Monate 8 Tage.

Da gibt es die Funtionen Yearspan und Monthspan.

Bei Monthspan zum Beispiel habe ich die ganzen Monate und eine Nachkommazahl.
Wie kann ich die Nachkommazahl in Tage umrechnen?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 11.11.10 14:31 
Dateutils und Handarbeit ;-)

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
MaxWurzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: Do 11.11.10 14:32 
Mit den Funktionen
EncodeDate und
DaysBetween
müsste es gehen.

Edit: Mit EncodeDate wird es doch nicht gehen. Benutze stattdessen IncDay.


Zuletzt bearbeitet von MaxWurzel am Do 11.11.10 14:35, insgesamt 1-mal bearbeitet
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 11.11.10 14:32 
Einfach kurz mal aus meiner Erinnerung:
Mach aus der Differenz den Typ TDateTime und benutze die Funktion DecodeDate
SpaghettiCodix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: Do 11.11.10 15:07 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Einfach kurz mal aus meiner Erinnerung:
Mach aus der Differenz den Typ TDateTime und benutze die Funktion DecodeDate


Hilfe! Egal wie ich mache, ich kriege hier ein seeehr falsches Ergebnis raus, nämlich:

Die Differenz beträgt: 1900 Jahre 1 Monate 30 Tage

Zitat:

procedure TForm1.Button1Click(Sender: TObject);
var
Datum1, Datum2:TDateTime; //double; //real;
diff:TDateTime; //double; //real;
J,M,T:word;
begin
Datum1:=strtodate('11.11.2010');
Datum2:=strtodate('12.12.2010');
diff:=datum2-datum1;
decodedate(diff,J,M,T);
Label1.caption:= 'Die Differenz beträgt: '+inttostr(J)+' Jahre '+inttostr(M)+'Monate '+
inttostr(T)+' Tage';
end;
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 11.11.10 15:27 
Habe ich vergessen.
Delphi hat ein "kleinstes" Datum. Das musst du vom Ergebnis abziehen. Bei den Jahren musst du erstmal 1900 abziehen. Bei den Monaten und Tagen musst du einfach mal nachsehen. Entweder Delphi-Hilfe aufrufen oder ausprobieren für eine Differenz von 0.
SpaghettiCodix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: Do 11.11.10 15:57 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Habe ich vergessen.
Delphi hat ein "kleinstes" Datum. Das musst du vom Ergebnis abziehen. Bei den Jahren musst du erstmal 1900 abziehen. Bei den Monaten und Tagen musst du einfach mal nachsehen. Entweder Delphi-Hilfe aufrufen oder ausprobieren für eine Differenz von 0.


Bei Differenz = 0 kommt sowas raus: Differenz 0 ist: 1899 Jahre 12 Monate 30 Tage

sowas geht nicht:
Zitat:

...
{Differenz 0 ist: 1899 Jahre 12 Monate 30 Tage}

Datum1:=strtodate('11.11.2010');
Datum2:=strtodate('13.11.2010');
diff:= datum2-datum1; //diff:=0;
decodedate(diff,J,M,T);
j:=j-1900; m:=m-12; t:=t-30;
...
SpaghettiCodix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: Do 11.11.10 16:36 
user profile iconMaxWurzel hat folgendes geschrieben Zum zitierten Posting springen:
Mit den Funktionen
EncodeDate und
DaysBetween
müsste es gehen.

Edit: Mit EncodeDate wird es doch nicht gehen. Benutze stattdessen IncDay.


Danke Maxwurzel, Du hast recht, ich habs.

Es sind die Funktionen IncDay und DaysBetween in DateUtils:

Zitat:

procedure TForm1.Button4Click(Sender: TObject);
var
Datum1, Datum2,Neudatum:TDateTime; //double; //real;
Tage:integer;
begin
Datum1:=strtodate('11.11.2010');
Datum2:=strtodate('12.11.2010');
Tage:=DaysBetween(datum1,datum2);
Neudatum:=incDay(now,tage);
Label2.Caption:= datetostr(Neudatum);
end;