[Gelöst] Tage Umrechnen

19. Februar 2019 18:28

Hallo Zusammen

Ich habe ein Datum gerechnet und habe jetzt anzahl Tage.

z.b.
Tage = 23

Jetzt möchte ich diese 23 Tage in Wochen und Tage dargestellt haben.

= 3W 2T

Wie stell ich das an ?
Danke Euch

Lg Dany
Zuletzt geändert von riffaquarium am 26. Februar 2019 00:03, insgesamt 1-mal geändert.

Re: Tage Umrechnen

19. Februar 2019 18:40

Code:
Wochen := Tage div 7;
RestTage := Tage mod 7;
Ausgabe := StrSubstNo('%1W %2T', Wochen, RestTage);


div = integer division
mod = rest

ggf. musst du in der Ausgabe abfangen wenn Wochen oder RestTage gleich 0 ist

Re: Tage Umrechnen

19. Februar 2019 19:23

Vom Prinzip ist die Antwort richtig, nur leider nicht vollständig.

Zuerst kann es schon einmal drei Fälle geben:
Datum1 = Datum2
Datum1 < Datum2
Datum1 > Datum2

Dann kann die Differenz im Bereich von Tagen, Wochen, Monaten oder gar Jahren liegen und eine beliebige Kombination dieser Zeiteinheiten umfassen.

Ich habe mal eine Funktion dafür geschrieben, welche diese Fälle berücksichtigt.
(Allerdings unterstützt sie ausdrücklich nur Tage, Monate und Jahre, also keine Wochen.)

CreateDateFormula(StartingDate : Date;EndingDate : Date) NewDateFormula : Text[250]
Code:
IF StartingDate = EndingDate THEN BEGIN
  EXIT
('<0D>');
END;
Negative := StartingDate > EndingDate;
TempDate := StartingDate;
IF Negative THEN BEGIN
  WHILE TempDate 
> EndingDate DO BEGIN
    TempDate 
:= CALCDATE('<-1Y>',TempDate);
    Years += 1;
  END;
  IF TempDate <> EndingDate THEN BEGIN
    TempDate 
:= CALCDATE('<1Y>',TempDate);  // 1 step back
    Years -= 1;
    WHILE TempDate > EndingDate DO BEGIN
      TempDate 
:= CALCDATE('<-1M>',TempDate);
      Months += 1;
    END;
    IF TempDate <> EndingDate THEN BEGIN
      TempDate 
:= CALCDATE('<1M>',TempDate);  // 1 step back
      Months -= 1;
      WHILE TempDate > EndingDate DO BEGIN
        TempDate 
:= CALCDATE('<-1D>',TempDate);
        Days += 1;
      END;
    END;
  END;

  IF Years > 0 THEN BEGIN
    NewDateFormula 
+= STRSUBSTNO('-%1Y',Years);
  END;
  IF Months > 0 THEN BEGIN
    NewDateFormula 
+= STRSUBSTNO('-%1M',Months);
  END;
  IF Days > 0 THEN BEGIN
    NewDateFormula 
+= STRSUBSTNO('-%1D',Days);
  END;
  NewDateFormula := '<' + NewDateFormula + '>';
END ELSE BEGIN
  WHILE TempDate 
< EndingDate DO BEGIN
    TempDate 
:= CALCDATE('<1Y>',TempDate);
    Years += 1;
  END;
  IF TempDate <> EndingDate THEN BEGIN
    TempDate 
:= CALCDATE('<-1Y>',TempDate);  // 1 step back
    Years -= 1;
    WHILE TempDate < EndingDate DO BEGIN
      TempDate 
:= CALCDATE('<1M>',TempDate);
      Months += 1;
    END;
    IF TempDate <> EndingDate THEN BEGIN
      TempDate 
:= CALCDATE('<-1M>',TempDate);  // 1 step back
      Months -= 1;
      WHILE TempDate < EndingDate DO BEGIN
        TempDate 
:= CALCDATE('<1D>',TempDate);
        Days += 1;
      END;
    END;
  END;

  IF Years > 0 THEN BEGIN
    NewDateFormula 
+= STRSUBSTNO('%1Y',Years);
  END;
  IF Months > 0 THEN BEGIN
    NewDateFormula 
+= STRSUBSTNO('+%1M',Months);
  END;
  IF Days > 0 THEN BEGIN
    NewDateFormula 
+= STRSUBSTNO('+%1D',Days);
  END;
  NewDateFormula := DELCHR(NewDateFormula,'<','+');
  NewDateFormula := '<' + NewDateFormula + '>';
END;
EXIT(
NewDateFormula); 

Re: Tage Umrechnen

19. Februar 2019 23:22

Danke dir Timo
ich versuche das morgen gleich mal
und melde mich

Lg Dany

Re: Tage Umrechnen

26. Februar 2019 00:03

Sali Timo

So habe das ganze eingebaut das funktioniert super habe es für mich noch ein bisschen angepasst.

Danke dir vielmals für dein Code

Grüsse
Dany