Autor Beitrag
Josef-B
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 22.07.04 17:56 
Kann mir jemand sagen ob und wie es möglich ist, den letzten Tag eines Monats zu berechnent.

Also Eingabe Februar - Ausgabe 28 oder 29.
Eingabe Juni Ausgabe 30.
Eingabe Juli > Ausgabe 31. ?

Den Wert für den Monat habe ich ja z.B. über decodedate.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 22.07.04 18:03 
Hm. So ginge es. Aber wahrscheinlich kommt gleich einer mit einer viel einfacheren Funktion. :-)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var year, month : Integer;
    theDate : TDateTime;
begin
  year  := 2004;
  month := 7;
  theDate := EncodeDate(year, month+11);
  theDate := theDate - 1;
  ShowMessage(DateToStr(theDate));
end;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Do 22.07.04 18:34 
Die folgende Funktion ist nicht wirklich einfacher, aber sie funktioniert auch ohne die SysUtils, was manchmal ganz praktisch ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function DaysOf(Month,Year:integer):integer;
begin
 case Month of
  2:
   if (((Year mod 4)=0and ((Year mod 100)>0)) or (Year mod 400)>0then Result:=29 else Result:=28;
  1,3..7:
   if (Month mod 2)=1 then Result:=31 else Result:=30;
  8..12:
   if (Month mod 2)=1 then Result:=30 else Result:=31;
  else Result:=0;
 end;
end;


//Edit: Year mod 400 ergänzt

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Zuletzt bearbeitet von maxk am Do 22.07.04 23:13, insgesamt 1-mal bearbeitet
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 22.07.04 22:03 
Danke Euch für die schnelle Antwort,

werde ich mich gleich morgen dran setzen und es ausprobieren :lol:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 22.07.04 22:10 
@maxk: Wenn das Jahr durch 400 teilbar ist, dann wird ein Schalttag eingefügt! :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 22.07.04 22:20 
da sollen sich dann mal andere ne Birne machen :idea: , Ob die dann auch noch in Delphi proggen?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 22.07.04 22:44 
Ähm, ein kleiner Hinweis: Ihr braucht nicht das Rad neu zu erfinden. In der Unit DateUtils gibt es Funktionen ohne Ende für solche Dinge, z.B.
Delphi-Hilfe hat folgendes geschrieben:
Die Funktion gibt die Anzahl der Tage im angegebenen Monat eines angegebenen Jahres zurück.

Unit

DateUtils

Kategorie

Datum/Zeit

Delphi-Syntax:

function DaysInAMonth(const AYear, AMonth: Word): Word;

C++ Syntax:

extern PACKAGE Word __fastcall DaysInAMonth(const Word AYear, const Word AMonth);

Beschreibung

Mit DaysInAMonth können Sie die Anzahl der Tage eines Monats im angegebenen Jahr ermitteln.

AYear gibt ein Jahr zwischen 1 und 9999 (inklusive) an.

AMonth gibt einen Monat zwischen 1 und 12 (inklusive) an.
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Do 22.07.04 23:14 
Peter Lustig hat folgendes geschrieben:
@maxk: Wenn das Jahr durch 400 teilbar ist, dann wird ein Schalttag eingefügt! :-)
Hab's geändert :D

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Amiga-Fan
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 534



BeitragVerfasst: Do 20.01.05 13:31 
ok hier gibt es doch noch einen Thread dazu.

Ich will darauf hinweisen, DaysInAMonth statt DaysInMonth zu benutzen. Letzteres berücksichtigt das Jahr und somit die Schaltjahre nicht.
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 20.01.05 13:36 
Amiga-Fan hat folgendes geschrieben:
ok hier gibt es doch noch einen Thread dazu.

Ich will darauf hinweisen, DaysInAMonth statt DaysInMonth zu benutzen. Letzteres berücksichtigt das Jahr und somit die Schaltjahre nicht.

Hi,

wie ich dir in dem anderen Beitrag schon geantwortet habe, ist die Behauptung falsch.
DaysInMonth und DaysInAMonth funktioneren beide gleich.

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
Amiga-Fan
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 534



BeitragVerfasst: Do 20.01.05 13:40 
tut mir leid, ein Kunde hat uns eine Fehlermeldung dabei übermittelt. "29.02.1999 ist kein gültiges Datum". Und ich habe diese Funktion benutzt. Ich habe es ersetzt und jetzt geht es. Aber von mir aus, glaub es eben nicht.

Edit: hier ist der Link zu dem anderen Thread: www.delphi-forum.de/...13946&highlight=
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Do 20.01.05 15:39 
ausblenden Delphi-Quelltext
1:
 if ( ((Year mod 4)=0and ((Year mod 100)>0) ) or (Year mod 400)>0then Result:=29 else Result:=28;					


Hmm, frage mich gerade, warum das nicht (Year mod 400=0) heisst.

Zitat:
Von Papst Gregor XIII. wurde daher 1582 folgende Regelung eingeführt (Gregorianischer Kalender):

* Glatt durch 4 teilbare Jahre sind Schaltjahre.
* Glatt durch 100 teilbare Jahre sind jedoch keine Schaltjahre.
* Glatt durch 400 teilbare Jahre sind aber wieder Schaltjahre.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 20.01.05 21:27 
Naja, etwas übersichtlicher mach ich's immer mit

ausblenden Delphi-Quelltext
1:
If ((Year mod 4 = 0and (Year mod 100 <> 0)) or (Year mod 400 = 0Then Schaltjahr;					

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.