Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как найти последний день месяца? [D5, Win2k]


Страницы:   1 2

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] имхо


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо