![]() |
Anzahl Tage im Monat
Hallo,
kann mir vielleicht jemand sagen, was ich falsch mache? Ich möchte die Anzahl der Tage im Monat zurückgeliefert bekommen, zu dem Datum das ich übergebe.
Delphi-Quellcode:
ich bekomme als Ergebnis: 4643288.AnzDays:= 0; AnzDays:= Daysinmonth(now); Was läuft hier schief? Danke und Gruß Susanne [edit=Luckie]Titel korrigiert. Mfg, Luckie[/edit] |
Re: Anzahl das im Monat
was ist den now
|
Re: Anzahl das im Monat
ich habe bei mir nur daysthismonth
|
Re: Anzahl das im Monat
Zitat:
|
Re: Anzahl das im Monat
@IIIMADDINIII Wenn Du Ergänzungen zu Deinem letzten Post hast, und noch kein anderer User geantwortet hat, dann klicke bitte auf EDIT rechts oben um die Information Deinem letzten Beitrag hinzuzufügen und schreibe nicht nochmal einen neuen. Das ist am Ende leserlicher.
Edit: Mit gutem Beispiel voran geh *g* Zitat:
|
Re: Anzahl das im Monat
@Susanne: versuche mal Date() statt Now
|
Re: Anzahl das im Monat
du kannst dir das auch selber pogramieren(ist nicht schwer)
du kannst auch einfach ein array erstellen mit den Tagen der einzelnen monaten erstellen und nach dem monatsnummer fragen und die in die rechteckigen klammer setzen. vorher machste noch ein if um zu fragen ob der feburar gefragt ist. wenn dies der fall ist fragste wieder mit einem if ob das jahr durch 4 teilbar ist. Dann hat der monat 29 tage. |
Re: Anzahl das im Monat
Zitat:
|
Re: Anzahl das im Monat
Zitat:
|
Re: Anzahl das im Monat
sieht auch nicht besser aus :-(
es wäre halt schön, wenn es solche Funktionen gibt, man diese auch nutzen kann. Aber leider will diese wohl nicht so wie ich. |
Re: Anzahl das im Monat
warum kann man nicht das mit dem schaltjahr so leicht herausfinden??
|
Re: Anzahl das im Monat
Zitat:
@Susanne: Gibt es vielleicht eine gleichnamige Funktion aus einer anderen Unit als DateUtils, welche vorher eingebunden wird? |
Re: Anzahl das im Monat
Keine Ahnung, was du falsch machst, aber bei mir funktioniert das:
Delphi-Quellcode:
uses
DateUtils; procedure TForm1.Button1Click(Sender: TObject); var days: Cardinal; begin days := DaysInMonth(now); ShowMessage(IntToStr(days)); end; |
Re: Anzahl Tage im Monat
ok, man sollte den Wert vielleicht auch aus der Funktion wieder zurückgeben, sobald ich dies an result übergebe funktioniert es auch.
Trotzdem vielen Dank für eure Hilfe. Ich hab vermutet, es musste irgendeine "Kleinigkeit" sein. |
Re: Anzahl Tage im Monat
sonst dieses script hätte auch funkitioniert
Delphi-Quellcode:
function TForm1.getdaysinmonth(date: TDATETIME): integer;
const monthday: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); begin if strtoint(formatdatetime('m', date)) <> 2 then begin result := monthday[strtoint(formatdatetime('m', date))]; end else begin if round(strtoint(formatdatetime('yyyy', date)) / 4) = strtoint(formatdatetime('yyyy', date)) / 4 then result := 29 else result := 28; end; end; |
Re: Anzahl Tage im Monat
Zitat:
|
Re: Anzahl Tage im Monat
seit wann denn das
|
Re: Anzahl Tage im Monat
Noch mal, es reicht nicht zu überprüfen ob ein Jahr durch vier Teilbar ist, um herauszufiden, ob es sich ume ine Schaltjahr handelt:
Zitat:
Zitat:
|
Re: Anzahl Tage im Monat
dann fügt man das einfach mit hinzu
Delphi-Quellcode:
wo ist das problem??
function TForm1.getdaysinmonth(date: TDATETIME): integer;
const monthday: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); begin if strtoint(formatdatetime('m', date)) <> 2 then begin result := monthday[strtoint(formatdatetime('m', date))]; end else begin if (round(strtoint(formatdatetime('yyyy', date)) / 4) = strtoint(formatdatetime('yyyy', date)) / 4) and not(round(strtoint(formatdatetime('yyyy', date)) / 400) = strtoint(formatdatetime('yyyy', date)) / 400) then result := 29 else result := 28; end; end; |
Re: Anzahl Tage im Monat
@IIIMADDINIII:Dein Code hat mehrere Probleme:
1. Parametername Date: Ist auche ien Funktion. Es ist nicht sichergestellt, das der richtige Wert verwendet wird. 2. Ablage der Werte in einem array ist überflüssig. 3. Wandlung DateTime->String->Integer ist aufwendig besser gleich in einen Integer wandeln (DecodeDate()) 4. Der Algorithmus ist komplexer: Wenn durch 4 teilbar aber nicht durch 100 (nur wenn durch 400 teilbar sind) 1900 war kein Schaltjahr aber 2000. |
Re: Anzahl Tage im Monat
Dafür gibt es IsLeapYear, da wird das berücksichtigt.
|
Re: Anzahl Tage im Monat
was macht denn dieses isleapptyear?
|
Re: Anzahl Tage im Monat
Zitat:
|
Re: Anzahl Tage im Monat
Aus der SysUtils.pas vom BSD2006:
Delphi-Quellcode:
function IsLeapYear(Year: Word): Boolean;
begin Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0)); end; |
Re: Anzahl Tage im Monat
Das sagt Dir, ob es sich um ein Schaltjahr handelt. F1 ist übrigens eine sehr nützliche Taste, die darf man gerne mal benutzen.
|
Re: Anzahl Tage im Monat
Zitat:
Sicherlich ist das Thema "Tage im aktuellen Monat" nur eine Kleinigkeit. Ich empfehle Dir trotzdem mal, über folgende Punkte nachzudenken: - Warum das Rad neu erfinden? - Warum selber Code schreiben (Zeitaufwand) für ein Problem das längst gelöst ist? - Warum selber Code schreiben wenn gut getesteter Code bereits mitgeliefert wird? Wenn Du Englisch kannst oder zumindest ein englisch-deutsches Wörterbuch bedienen kannst, dann schau Dir mal ![]() |
Re: Anzahl Tage im Monat
Nur wenn man diese Funktion verwendet, bindet man ja DateUtils ein, dann kann man gleich DayInMonth() verwenden :zwinker:
|
Re: Anzahl Tage im Monat
Zitat:
|
Re: Anzahl Tage im Monat
dann geht es ja noch leichter
Delphi-Quellcode:
function TForm1.getdaysinmonth(date: TDATETIME): integer;
const monthday: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); begin if strtoint(formatdatetime('m', date)) <> 2 then begin result := monthday[strtoint(formatdatetime('m', date))]; end else begin if isleapjear(date) then result := 29 else result := 28; end; end; |
Re: Anzahl Tage im Monat
@IIIMADDINIII: Du solltest dir die Antworten hier mal durchlesen!
|
Re: Anzahl Tage im Monat
es biringt übung im programieren wenn man das tut
|
Re: Anzahl Tage im Monat
Ich hatte aber oben deinen Code kommentiert.
|
Re: Anzahl Tage im Monat
kommentieren mach ich nict so gern
|
Re: Anzahl Tage im Monat
Er meinte er hat in Beitrag #23 erklärt, warum Dein Code nicht optimal ist :zwinker:
|
Re: Anzahl Tage im Monat
Zitat:
Wieso machst du es dir so umständlich??? Da du ehh DateUtils verwendest, musst du das doch nicht um tausend ecken machen, und lieber gleich die passende funktion aus der Unit "DateUtils" nehmen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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