AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Tagesanzahl Februar eines Jahres

Ein Thema von Kratos · begonnen am 10. Dez 2020 · letzter Beitrag vom 14. Dez 2020
Antwort Antwort
Seite 1 von 3  1 23   
Kratos

Registriert seit: 15. Okt 2019
37 Beiträge
 
Delphi 10.4 Sydney
 
#1

Tagesanzahl Februar eines Jahres

  Alt 10. Dez 2020, 16:27
Delphi-Version: 10.4 Sydney
Hallo Leute,

ich hab jetzt sehr lange herumgesucht und auch einige Foreneinträge gefunden, die mich etwas weitergebracht haben.
Jedoch führte keines meiner Experimente zu dem Ergebnis, welches ich im Sinn hatte.
Dabei sieht die Problemstellung für mich doch recht banal aus...

Ich möchte eine Altersberechnung durchführen. Dazu benutze ich 3 Comboboxen.

cbbDay
cbbMonth
cbbYear

Die eigentliche Altersberechnung führe ich hiermit durch: https://www.delphipraxis.net/146593-...errechnen.html

Ich möchte mit einbauen, dass je nachdem welcher Monat in cbbMonth ausgewählt wird, die monatsspezifische Anzahl an Tagen in cbbDay geladen wird.
Das klappt auch für alle Monate. Bloß nicht für den Februar.

Mein Versuch:
Delphi-Quellcode:
var
   days: Cardinal;

begin
...
   days := DaysInMonth(StrToDate(cbbYear.Text + '.02'));
...
end;
Vorausgesetzt ich wähle 2020 in cbbYear, bringt er mir den Fehler
Code:
2020.02 ist kein gültiges Datum
Das seh ich auch ein.
Aber ich weiß einfach nicht wie ich das nun lösen soll.

Kompletter Code der Prozedur:
Delphi-Quellcode:
procedure TForm1.cbbMonthClick(Sender: TObject);
var
  i: Integer;
  days: Cardinal;
begin
  if cbbMonth.ItemIndex >= 0 then
  begin
    cbbDay.Enabled := True;
    if cbbMonth.ItemIndex in [0, 2, 4, 6, 7, 9, 11] then // Monate mit 31 Tagen
    begin
      for i := 1 to 31 do // Füge 31 Items(Tage) der cbbDay hinzu
      begin
        cbbDay.Items.Add(IntToStr(i));
      end;
    end
    else
    begin // alle anderen Monate
      if cbbMonth.ItemIndex = 1 then // Für Monat Februar
      begin
        days := DaysInMonth(StrToDate(cbbYear.Text + '.02'));
        for i := 1 to days do // Füge die jahrespezifische Tagesanzahl für Februar hinzu
        begin
          cbbDay.Items.Add(IntToStr(i));
        end
      end
      else
      begin
        for i := 1 to 30 do // Monate mit 30 Tagen
        begin
          cbbDay.Items.Add(IntToStr(i));
        end;
      end;
    end;
  end
  else
  begin
    cbbDay.Enabled := False;
  end;
end;
Wie gesagt, ich denke die Lösung ist einfach, da mir auch die OH sagt, dass ich doch nur den Monat in TDateTime eingeben soll.
Ich weiß aber nicht, wie das aussehen soll.
Ich hoffe ihr könnt mir weiterhelfen.

VG Kratos
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.623 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Tagesanzahl Februar eines Jahres

  Alt 10. Dez 2020, 16:35
.. versuche mal DaysInAMonth(year, month); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.838 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Tagesanzahl Februar eines Jahres

  Alt 10. Dez 2020, 16:39
Versuch es mal damit:
days := DaysInAMonth(StrToInt(cbbYear.Text, 2)); http://docwiki.embarcadero.com/Libra...s.DaysInAMonth
Zitat:
function DaysInAMonth(const AYear, AMonth: Word): Word;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.819 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Tagesanzahl Februar eines Jahres

  Alt 10. Dez 2020, 16:43
Wenn schon DaysInMonth verwenden, dann doch einfach in allen Fällen:
Delphi-Quellcode:
var
  i: Integer;
  days: Cardinal;
  month: Integer;
  year: Integer;
begin
  cbbDay.Enabled := False;
  if cbbMonth.ItemIndex >= 0 then
  begin
    month := cbbMonth.ItemIndex + 1;
    if TryStrToInt(cbbYear.Text, year) then
    begin
      days := DaysInMonth(EncodeDate(year, month, 1));
      for i := 1 to days do // Füge die jahrespezifische Tagesanzahl für den Monat hinzu
      begin
        cbbDay.Items.Add(IntToStr(i));
      end;
      cbbDay.Enabled := True;
    end
    else
    begin
      ShowMessage('ungültiges Datum!');
    end;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming

Geändert von Uwe Raabe (11. Dez 2020 um 13:38 Uhr) Grund: weil ich eben gemein bin
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.838 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Tagesanzahl Februar eines Jahres

  Alt 10. Dez 2020, 16:50
Ist das fehlende begin ein Kopierschutz?

...ändern ist gemein.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.819 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Tagesanzahl Februar eines Jahres

  Alt 10. Dez 2020, 17:25
Ist das fehlende begin ein Kopierschutz?
Nein, eine Folge der fehlenden Visualisierungs-Tools des Forum-Editors. Ich habe so meine Probleme mit Web-Editoren. Der Cursor ist nie da wo man ihn vermutet und dann löscht man eine Zeile ohne es zu bemerken...

Normalerweise schreibe ich sowas in der Delphi-IDE, aber das setzt in der Regel ein compilierbares Projekt oder zumindest compilierbaren Code voraus.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.287 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Tagesanzahl Februar eines Jahres

  Alt 10. Dez 2020, 17:57
Oder wenn man bei der ursprünglichen Lösung bleiben möchte:
Delphi-Quellcode:
if IsLeapYear(Year) then
  Days := 29
else
  Days := 28;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kratos

Registriert seit: 15. Okt 2019
37 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Tagesanzahl Februar eines Jahres

  Alt 11. Dez 2020, 08:58
Guten Morgen,

vielen Dank für die vielen Antworten!
Ich hab mich schlussendlich für die Lösung von DeddyH entschieden.
Es funktioniert.

VG
Kratos
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.918 Beiträge
 
Delphi 7 Professional
 
#9

AW: Tagesanzahl Februar eines Jahres

  Alt 11. Dez 2020, 13:01
Geht aber kürzer Days := IfThen(IsLeapYear(Year),29,28);
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
442 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Tagesanzahl Februar eines Jahres

  Alt 11. Dez 2020, 16:06
Geht aber kürzer Days := IfThen(IsLeapYear(Year),29,28);
Wow!
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf