Autor |
Beitrag |
SpaghettiCodix
      
Beiträge: 52
Erhaltene Danke: 1
WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 11.11.10 14:31
Dateutils und Handarbeit 
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
MaxWurzel
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: 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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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 
      
Beiträge: 52
Erhaltene Danke: 1
WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
|
Verfasst: Do 11.11.10 15:07
jasocul hat folgendes geschrieben : | 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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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 
      
Beiträge: 52
Erhaltene Danke: 1
WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
|
Verfasst: Do 11.11.10 15:57
jasocul hat folgendes geschrieben : | 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 
      
Beiträge: 52
Erhaltene Danke: 1
WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
|
Verfasst: Do 11.11.10 16:36
MaxWurzel hat folgendes geschrieben : | 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;
|
|
|