![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как найти последний день месяца? [D5, Win2k]
JetMan © (2004-09-20 06:50:00)Здравствуйте уважаемые эксперты!
Подскажите, есть ли какие-нибудь функций на Delphi для нахождения последнего дня месяца, т.е. узнать сколько дней в месяце. Пример, Февраль 28(29) дней, Январь 31 и т.д.
SergP. (2004-09-21 07:26:00) [1]
> [22] kukuikar © (20.09.04 15:05)
>
> > SergP. (20.09.04 14:46) [21]
>
> все, мне кажется это логический конец этой дискуссии.
Ну при желании можно еще немножко поизвращаться:
function LastDayOfMonth(const nom: byte; const year:word): byte;
begin
if nom=2
then if ((year and 3 = 0) and (year mod 25 > 0)) or (year and 15 = 0)
then Result:=29
else Result:=28
else result:=Month shr 3 xor Month and 1 or 30;
end;
Fay (2004-09-20 21:55:00) [2]2 [26] Isaev (20.09.04 21:52)
Год является високосным, если он кратен 4.
... Но если он кратен 100, то он не високосный.
... Но если он кратен 400, то он всё-таки високосный 8)
Isaev (2004-09-20 21:52:00) [3]Mm:=номер месяца от 1 до 12
/..................../
If Mm=2 Then
Begin
If Gm Mod 4=0 Then I:=29
Else I:=28;
End
Else I:=30+Mm And 1 Xor Mm Shr 3;
/..................../
Я здесь случайно оказался, т.ч. если что не понятно, пиши на мыло
P.S.: тоже что-то слышал о том что не каждый 4 год високосный, но из ненадёжных источников, если кто точно знает напишите на мыло, если не сложно.С уважением Isaev!
Fay (2004-09-20 19:59:00) [4]2 [24] art (20.09.04 19:55)
Это что?! Что-то никак понять не могу.
art (2004-09-20 19:55:00) [5]Если имеешь Delphi7
sBuff1:='';sBuff2:='';sBuff3:='';sBuff4:='';yyyy:='';yy:='';mm:='';d1:='';d4:='';dd:='';//????????? ????????
Label1.Caption:=TimeToStr(Time); //time ? ?????
// yy:=AddChar('0', FormatDateTime('yy',Now+0.125), 2); //???
обрати внимание на Now,Yesterday и т.д.^^^^^^^^^^^^^^^^^^^^^^^^ До Delphi7 в Delphi3-5 создавай конструкции case и т.д.
// mm:=AddChar('0', FormatDateTime('mm',Now+0.125), 2); //?????
// d1:=FormatDateTime('dd',Now+0.125); //????
yy:=AddChar('0', FormatDateTime('yy',Yesterday+0.125), 2);//Delphi7 ???
mm:=AddChar('0', FormatDateTime('mm',Yesterday+0.125), 2);//Delphi7 ?????
dd:=AddChar('0', FormatDateTime('dd',Yesterday+0.125), 2);//Delphi7 ????
Label10.Caption:='Yesterday:'+DateToStr(Yesterday); //???? 0 //Delphi7
// d2int:=StrToInt(d1); //????
// d3int:=d2int-1; //???? -1
// d4:=IntToStr(d3int); //????
// dd:=AddChar('0',d4,2); //???? 0
Ega23 (2004-09-20 15:08:00) [6]RXLib, uses DateUtil, FirstDayOfNextMonth-1.
Если последний день N-го месяца, то
IncMonth((FirstDayOfNextMonth-1),N).
kukuikar (2004-09-20 15:05:00) [7]
> SergP. (20.09.04 14:46) [21]
все, мне кажется это логический конец этой дискуссии.
SergP. (2004-09-20 14:46:00) [8]function LastDayOfMonth(const nom: byte; const year:word): byte;
begin
if nom=2
then if ((year mod 4 =0) and (year mod 100 >0)) or (year mod 400 = 0)
then Result:=29
else Result:=28
else if (nom>7) xor (nom mod 2 = 1)
then result:=31
else result:=30;
end;
Skyle (2004-09-20 14:41:00) [9]
> [18] Vitaly © (20.09.04 14:37)
Нда... На год внимания не обратил...
Под конец рабочего дня и не такое пишут...;-)
Ну тогда так.
function LastDayOfMonth(ADate : TDate) : TDate;
var Y, M, D : Word;
begin
DecodeDate(ADate, Y, M, D);
Result := EncodeDate(Y + Ord(M = 12),M mod 12 + 1, 1) - 1;
end;
SergP. (2004-09-20 14:37:00) [10]
> [11] kukuikar © (20.09.04 13:13)
> Проверку високосного года дай сам!
>
> function LastDayOfMonth(const nom: Integer): Integer;
> begin
> case nom of
> 1: Result:=31;
> 2: Result:=28;
> 3: Result:=31;
> 4: Result:=30;
> 5: Result:=31;
> 6: Result:=30;
> 7: Result:=31;
> 8: Result:=31;
> 9: Result:=30;
> 10: Result:=31;
> 11: Result:=30;
> 12: Result:=31;
> end;
> end;
function LastDayOfMonth(const nom: byte; const year:word): byte;
begin
case nom of
1: Result:=31;
2: if ((year mod 4 =0) and (year mod 100 >0)) or (year mod 400 = 0)
then Result:=29
else Result:=28;
3: Result:=31;
4: Result:=30;
5: Result:=31;
6: Result:=30;
7: Result:=31;
8: Result:=31;
9: Result:=30;
10: Result:=31;
11: Result:=30;
12: Result:=31;
end;
end;
Vitaly (2004-09-20 14:37:00) [11]И какая дата будет:
LastDayOfMonth('12-dec-2004')?
Skyle (2004-09-20 14:30:00) [12]
> [16] Coven (20.09.04 14:12)
Ой, а можно я тоже свой вариант предложу? ;-)))))))))))
function LastDayOfMonth(ADate : TDate) : TDate;
var Y, M, D : Word;
begin
DecodeDate(ADate, Y, M, D);
Result := EncodeDate(Y, M mod 12 + 1, 1) - 1;
end;
Coven (2004-09-20 14:12:00) [13]function GetLastDayMonth( d :TDate): TDate;
var
yyy, mmm, ddd :word;
begin
DecodeDate(d, yyy, mmm, ddd);
mmm:=mmm+1;
if mmm>12 then mmm:=1;
ddd:=1;
Result:=EncodeDate(yyy,mmm,ddd)-1;
end;
Skyle (2004-09-20 13:22:00) [14]
> вопрос как раз в том какой год високосный а какой нет
IsLeapYear...
Но вот не могу понять, зачем такие извращения...
kukuikar (2004-09-20 13:21:00) [15]
> TUser © (20.09.04 13:18) [12]
>
> > Проверку високосного года дай сам!
>
> :)
ну а чё, мне еме все написать и скомпилировать может надо?:)
ghg (2004-09-20 13:20:00) [16]>kukuikar © (20.09.04 13:13) [11]
вопрос как раз в том какой год високосный а какой нет
см.[7,8]
TUser (2004-09-20 13:18:00) [17]
> Проверку високосного года дай сам!
:)
kukuikar (2004-09-20 13:13:00) [18]Проверку високосного года дай сам!
functionLastDayOfMonth( constnom: Integer): Integer;
begin
casenom of
1: Result:=31;
2: Result:=28;
3: Result:=31;
4: Result:=30;
5: Result:=31;
6: Result:=30;
7: Result:=31;
8: Result:=31;
9: Result:=30;
10: Result:=31;
11: Result:=30;
12: Result:=31;
end;
end;
DarkMan (2004-09-20 12:32:00) [19]DaysInMonth
ghg (2004-09-20 12:14:00) [20]>Romkin © (20.09.04 12:12) [8] ну да это и хотел сказать
поэтому самодельничеством лучше не заниматься а использовать [4] имхо