Jak ustalić ostatni dzień

0

Jak w Delphi ustalić ostatni dzień wybranego miesiąca.
Mamy zmienną TDateTime zawierającą wypadkową datę jak ustalić
jaki numer ma ostatni dzień miesiąca dla tej daty?

0
var
  dt: tdate;
begin
  dt := incmonth(dt);
  dayoftheweek(incday(encodedate(yearof(dt), monthof(dt), 1), -1));
end; 
0

Witam...

Chyba jednak coś nie działa z tego co wiem ostatnim dniem Maja jest 31 a nie 4 ????
Kompilowałem na Delphi7

procedure TForm1.Button1Click(Sender: TObject);
var
dt: tdate;
LastDay: integer;
begin
dt:=Now;
dt := incmonth(dt);
LastDay:=dayoftheweek(incday(encodedate(yearof(dt), monthof(dt), 1), -1));
(Sender as TButton).Caption:=IntToStr(LastDay);
end;

0

Jeżeli skorzystasz z modułu DateUtils, to można w taki sposób:

procedure TForm1.Button1Click(Sender: TObject);
var Data: TDateTime;
    R, M, D: Word;      // Rok, miesiąc, dzień
begin
  DecodeDate(Now, R, M, D);
  Data:= EndOfAMonth(R, M);
  DecodeDate(Data, R, M, D);
  Label1.Caption:= IntToStr(D);
end;
0

Jest problem bo Luty 2011 ma dziwną ilość dni....

uses DateUtils;

function UstalNumerOstatniegoDniaMiesiaca(DataCzas: TdateTime): integer;
var Data: TDateTime;
R, M, D: Word; // Rok, miesiąc, dzień
begin
DecodeDate(Now, R, M, D);
Data:= EndOfAMonth(R, M);
DecodeDate(Data, R, M, D);
Result := D;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
(Sender as TButton).Caption:=IntToStr(UstalNumerOstatniegoDniaMiesiaca(StrToDateTime('2011-02-02')));
end;

0
function UstalNumerOstatniegoDniaMiesiaca(DataCzas: TdateTime): integer;
var Data: TDateTime;
    R, M, D: Word;      // Rok, miesiąc, dzień
begin
  DecodeDate(DataCzas, R, M, D); //po co tu miales Now ?
  Data:= EndOfAMonth(R, M);
  DecodeDate(Data, R, M, D);
  Result := D;
end;
0

Jest problem bo Luty 2011 ma dziwną ilość dni....

function IleDniMaLuty(rok:word):integer;
begin
  if IsLeapYear(rok)
    then IleDniMaLuty:=29
    else IleDniMaLuty:=28;
end;

albo, bez używania żadnych gotowych funkcji

function IleDniMaLuty(rok:word):integer;
begin
  IleDniMaLuty:=28;
  if rok mod 4 = 0 then IleDniMaLuty:=29;
  if rok mod 100 = 0 then IleDniMaLuty:=28;
  if rok mod 400 = 0 then IleDniMaLuty:=29;
end;
0

To funkcje z Delphi

  DecodeDate(DataCzas, R, M, D);
  Data:= EndOfAMonth(R, M);
  DecodeDate(Data, R, M, D);

nie "wiedzą", który rok jest przestępny???

0

Fakt to zmęczenie kolejne kilkanaście godzin przed Delphi...
Działa doskonale dzięki!
Pozdrawiam

1
tester_68k napisał(a)

Mamy zmienną TDateTime zawierającą wypadkową datę jak ustalić
jaki numer ma ostatni dzień miesiąca dla tej daty?

Za pomocą funkcji DaysInMonth z modułu DateUtils

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0