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?
var
dt: tdate;
begin
dt := incmonth(dt);
dayoftheweek(incday(encodedate(yearof(dt), monthof(dt), 1), -1));
end;
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;
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;
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;
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;
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;
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???
Fakt to zmęczenie kolejne kilkanaście godzin przed Delphi...
Działa doskonale dzięki!
Pozdrawiam
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
No tak po co odkrywać koło ponownie