AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Monate berechnen zwischen zwei datums
Thema durchsuchen
Ansicht
Themen-Optionen

Monate berechnen zwischen zwei datums

Ein Thema von peter12 · begonnen am 29. Apr 2005 · letzter Beitrag vom 1. Mai 2005
Antwort Antwort
Seite 2 von 4     12 34      
peter12

Registriert seit: 28. Feb 2005
Ort: Oberneukirchen ,Österreich
183 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Monate berechnen zwischen zwei datums

  Alt 29. Apr 2005, 21:25
Derzeit habe ich folgenten Code

dat.datum.CalendarDate := query1geb_datum.value;
while now > dat.date do
begin
dat.datum.NextMonth;
inc (r);
end;

Monate := r;


peter
  Mit Zitat antworten Zitat
Strophi

Registriert seit: 15. Okt 2004
Ort: Recklinghausen
33 Beiträge
 
#12

Re: Monate berechnen zwischen zwei datums

  Alt 29. Apr 2005, 21:47
Hi,

Zitat von Hansa:
Zitat von Strophi:
...Ich finde die Formulierung schon im ersten Post verständlich...
Na also, dann sage ihm was zu tun ist. Oder ist das auch nur ein ??? überflüssiges Posting ???
Wieso, Du hast die Antwort doch schon gehabt, und sie ihm aus Nickelichkeit nicht gegeben...

mfg

Strophi
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

Re: Monate berechnen zwischen zwei datums

  Alt 29. Apr 2005, 21:54
Zitat von Strophi:
...Wieso, Du hast die Antwort doch schon gehabt, und sie ihm aus Nickelichkeit nicht gegeben...
Soweit ich weiß liegt Hollywood in Kalifornien. Also liefere jetzt endlich die Antwort. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Strophi

Registriert seit: 15. Okt 2004
Ort: Recklinghausen
33 Beiträge
 
#14

Re: Monate berechnen zwischen zwei datums

  Alt 29. Apr 2005, 22:32
Hi,

Ich habe gesagt, ich habe sein Problem verstanden, aber nicht das ich eine Antwort hätte.
Aber ich weiß worauf Du hinauswillst.
Du als 3K+Beiträge-Member, schüttelst doch sowas aus dem Ärmel, lächelst doch drüber.
Du hast die Antwort, wie du gerade anmerktest, also los...

mfg

strophi
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#15

Re: Monate berechnen zwischen zwei datums

  Alt 29. Apr 2005, 23:35
JUNGS! Alle beide! Reisst Euch gefälligst zusammen.

1) Anzahl an Beiträgen ist keineswegs ein Kriterium für Wissen
2) Das hat HIER überhaupt nichts zu suchen
3) Das Problem ist bekannt, darüber braucht nicht diskutiert zu werden
4) Das Landet gleich bei einem Mod wenn ihr Euch weiter so aufführt

So, und nun zur Problemlösung:

Schritt 1:
Drösele beide Daten nach Tag, Monat und Jahr auf.
Dann vergleiche erstmal die Jahre. Sind diese Unterschiedlich nehme die Differenz dazwischen. Ziehe nun noch eins ab und multipliziere mit 12. Damit hast Du erstmal die Monate der jahresdifferenz. Das eine Jahr wird abgezogen, weil das erste Jahr nicht ungebdingt voll ist (im Beispiel ist es da, aber egal).

Dann rechnest Du weiter: 13 - Monat im Geburtstag (ist die Anzahl der begonnen Monate im ersten nicht unbedingt vollen Jahr) das zum vorherigen dazuaddieren. Dann rechnest Du noch die Monatszahl des zweiten Datums dazu.

Beispiel: 17.01.1979 (mein Geburtstag) und heute 29.04.2005
Differenz der Jahre: 2005 - 1979 = 26.
Minus eins, mal 12: 26-1 = 25; 25 * 12 = 300
13 - Monat im Gebtag. und zur Summe addieren: 13 - 1 = 12; 300 + 12 = 312
Aktueller Monat aufaddieren: 312 + 4 = 316

==> Ich bin 316 Monate alt. Prüfung: 316 / 12 = 26,33333
Ich bin 26, stimmt schonmal und 12 durch 3,333 = 3,6 Monate. 3,6 Monate sind seit Januar auch schon vergangen ==> Passt also.

Wenn die beiden Jahreszahlen Identisch sind ist es eh einfacher: Monat im Vergleichsdatum - Monat im Geburtstag -1 => Ferdsch.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#16

Re: Monate berechnen zwischen zwei datums

  Alt 29. Apr 2005, 23:57
Hauptsache ich werd hier angemacht

Dabei kann man mit den paar Beriffen die ich ihm da hingeworfen hab doch schon was anfangen oder?
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
peter12

Registriert seit: 28. Feb 2005
Ort: Oberneukirchen ,Österreich
183 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Monate berechnen zwischen zwei datums

  Alt 30. Apr 2005, 07:48
Danke für die Lösung an Phoenix

Hab die Code mußte 1 Monat abziehen .


var Year, Month,Day ,Year2, Month2,Day2: Word;
Geburtsdatum : tdate; r : integer;
begin
Geburtsdatum := strtodate(edit1.text);
DecodeDate(Geburtsdatum, Year, Month,Day);
DecodeDate(now, Year2, Month2,Day2);
r := (((Year2-Year)-1)*12)+12-Month+Month2
end;
Peter
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: Monate berechnen zwischen zwei datums

  Alt 30. Apr 2005, 07:58
@peter12:

Messen kannst du nur mit einer Norm. Monate stellen keine Norm dar, sie haben unterschiedlich viele Tage. Du musst also als erstes eine Norm definieren, die bei grober Betrachtung mit einem Kalendermonat gleich gesetzt werden kann. Wenn dein Monat der zwölfte Teil eines Jahres sein soll, dann hast du folgende Möglichkeiten:
  • Nimm das arithmetische 100 jährige Mittel.
  • Nimm das arithmetische Mittel im Betrachtungszeitraum.
  • Verwende die Rechenweise der Banken.
Mir fallen gerade keine sinnvollen Alternativen mehr ein.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#19

Re: Monate berechnen zwischen zwei datums

  Alt 30. Apr 2005, 08:09
Ich hab mal eine (relativ) genaue Funktion geschrieben, die auch auf die verschiedenen Monate achtet. Schaltjahre werden zwar nicht berücksichtigt, aber... schauts euch mal an:

Delphi-Quellcode:
function GetMonths(aDate: TDate): integer;
var
  years, months, days: word;
begin
  DecodeDate(aDate, years, months, days);
  case months of
    1: Months := Months + days div 31;
    2: Months := Months + days div 28;
    3: Months := Months + days div 31;
    4: Months := Months + days div 30;
    5: Months := Months + days div 31;
    6: Months := Months + days div 30;
    7: Months := Months + days div 31;
    8: Months := Months + days div 31;
    9: Months := Months + days div 30;
    10: Months := Months + days div 31;
    11: Months := Months + days div 30;
    12: Months := Months + days div 31;
  end;
  Months := Months + years * 12;
  result := Months;
end;
Damit kann man jetzt EIN Datum in Monate aufspalten. Mit einem zweiten Aufruf dieser Funktion kann man auch die Differenz ausrechnen.

Hoffe, ich konnte dir helfen!

Mfg malo

//edit: nicht auf funktionalität geprüft!
//edit2: Und nochmal die Funktion, aber etwas genauer (mit Nachkommastellen):
Delphi-Quellcode:
function GetMonths(aDate: TDate): extended;
var
  years, months, days: extended;
begin
  DecodeDate(aDate, years, months, days);
  case months of
    1: Months := Months + days / 31;
    2: Months := Months + days / 28;
    3: Months := Months + days / 31;
    4: Months := Months + days / 30;
    5: Months := Months + days / 31;
    6: Months := Months + days / 30;
    7: Months := Months + days / 31;
    8: Months := Months + days / 31;
    9: Months := Months + days / 30;
    10: Months := Months + days / 31;
    11: Months := Months + days / 30;
    12: Months := Months + days / 31;
  end;
  Months := Months + years * 12;
  result := Months;
end;
Wieder ungetestet, sollte aber funktionieren.
  Mit Zitat antworten Zitat
peter12

Registriert seit: 28. Feb 2005
Ort: Oberneukirchen ,Österreich
183 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Monate berechnen zwischen zwei datums

  Alt 30. Apr 2005, 12:34
Danke für die Hilfe

Möchte diese Berechnung in STored Procedures ablaufen lassen.
Da sich ja das Alter in Monaten jeden Tag ändern kann.
Versuchte folgenden Code
SQL-Code:
create PROCEDURE RI_ALT (
    JAHR SMALLINT,
    MONAT SMALLINT)
AS
DECLARE VARIABLE R INTEGER;
begin
  for
  select nr,extract(year from geb_datum) as y,
  extract(month from geb_datum) as mon from rinder
  where id_nr < 20000
   into :jahr,:monat,:r
  do begin
  r = y;
   r = (((jahr-y)-1)*12)+12-mon+monat;
   update rinder set alter_ = :r where nr = 1209;
   end
  suspend;
end
Bekomme aber Fehler da die Nr und y und mon von der Tabelle rinder nicht erkannt werden.

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
Y.
At line 13, column 7.

Ist es nicht möglich die Tabelle Rinder durchzulaufen und die Spalte Alter_ zu aktualisieren.

Verwende Firebird 1.5

peter

[edit=Sharky]SQL-Tags gesetzt. Mfg, Sharky[/edit]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz