Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vorjahr und Vormonat berechnen. (https://www.delphipraxis.net/82424-vorjahr-und-vormonat-berechnen.html)

lemi4ever 12. Dez 2006 22:31


Vorjahr und Vormonat berechnen.
 
Kann mir jemand kurz helfen. Wie kann ich am einfachsten (wir gehen vom aktuellen Datum aus) den Vormonat und das Vorjahr ermitteln ?
wir haben den 12.12.2006 und ich benötige somit die 11 und November sowie das Vorjahr also 2005

Vielleich kann mir auch jemand ein kleines Beispiel machen.

Vielen Dank


Michael

Maja Jessica 12. Dez 2006 22:59

Re: Vorjahr und Vormonat berechnen.
 
Guten Morgen

Eventuell hilft dir dieses ein wenig weiter

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var heute, vormonat, vorjahr : TDate;
     jahr, monat, tag : word;
begin
 heute := now;
 ShowMessage(DateToStr(now));

 vormonat := now - 31;
 ShowMessage(DateToStr(vormonat));

 vorjahr := now - 365;
 ShowMessage(DateToStr(vorjahr));

 DecodeDate(vorjahr, jahr, monat, tag);
 ShowMessage(IntToStr(Jahr));
end;
Zitat:

Der Typ TDate wird zur Darstellung eines Datums verwendet.

Unit

Controls

type TDate = type TDateTime;

Beschreibung

TDate repräsentiert den speziellen Typ eines TDateTime -Wertes ohne Dezimalstellen. Ein TDate-Wert gibt die Anzahl der Tage an, die seit dem 30.12.1899 vergangen sind.
Ziehst du von "Heute" 1 ab dann hast du "Gestern" ;-)

(Die Nachkommastellen bei TDateTime stellen die Uhrzeit in Dezimal dar)

Alle Angaben ohne Gewähr, daher austesten (befasse mich gerade auch lernenderweise damit)

Gruß, MJ

Thorben_K 13. Dez 2006 06:21

Re: Vorjahr und Vormonat berechnen.
 
das probleme daran ist nur, das bei monaten mit 30 tagen, dem februar, und schaltjahren das ergebniss nicht stimmt

hsg 13. Dez 2006 06:40

Re: Vorjahr und Vormonat berechnen.
 
Hallo,

probier es mal damit:
Delphi-Quellcode:
// Bedeutung Intervalle :
//   1   <-> täglich
//   2   <-> wöchentlich
//   3   <-> monatlich
//   4   <-> jährlich

case Intervall of
  1: dNeuDatum := dDatum - 1;
  2: dNeuDatum := dDatum - 7;
  3: begin
        DecodeDate(dDatum,nYear,nMon, nDay);
        if nMon - 1 < 1 then begin
           nYear := nYear - 1;
           nMon  := 12;
        end else begin
           nMon  := nMon - 1;
        end;
        dNeuDatum := EncodeDate(nYear,nMon + 1,nDay);
      end;
  4: begin
        DecodeDate(dDatum,nYear,nMon, nDay);
        dNeuDatum := EncodeDate(nYear - 1 ,nMon,nDay);
      end;
end;
Hier fehlt nun noch die Überprüfung in den Abfragen Monatlich und Jährlich, ob der Tag noch in dem neu Berechnetem Datum gültig ist.
also eine Abfrage der Art:
Delphi-Quellcode:
 if nDay > DaysInAMonth(nYear,nMon) then begin
    ???
 end;

Gruß Jörg

lemi4ever 13. Dez 2006 06:48

Re: Vorjahr und Vormonat berechnen.
 
Allgemein Danke für die Antworten


Gruss

Michael

Thanatos81 13. Dez 2006 07:22

Re: Vorjahr und Vormonat berechnen.
 
Wie wäre es damit?

Delphi-Quellcode:
procedure VorWerte(datum: TDateTime; var vTag, vMonat, vJahr: Word);
begin
  DecodeDate(datum, vTag, vMonat, vJahr);

  //Überall eins abziehen
  dec(vTag);
  dec(vMonat);
  dec(vJahr);

  //von Januar nach Dezember
  if vMonat < 1 then
    vMonat := 12;

  //vom 1. des Monats zum letzten von vMonat
  if vTag < 1 then
    case vMonat of
      1, 3, 5, 7, 8, 12: vTag := 31;
      4, 6, 9, 11: vTag := 30;
      2:
        begin
        //Februar im Schaltjahr oder nicht?
          if IsLeapYear(vJahr) then
            vTag := 29
          else
            vTag := 28;
        end;
    end;
end;
Ist jetzt gerade aus der Hand getippt, bin mir z.B. bei der Reihenfolge der Parameter für DecodeDate nicht sicher. AUch über vTag müsste man evtl. nachdenken ;-)

Mavarik 13. Dez 2006 08:06

Re: Vorjahr und Vormonat berechnen.
 
Hallo!

Schau die doch mal die DateUtils an...

Da ist eigentlich alles drinn, was Du brauchst...

mfg Frank :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz