Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Как найти последний день месяца?   Найти похожие ветки 

 
JetMan   (2004-09-20 06:50) [0]

Здравствуйте уважаемые эксперты!
Подскажите, есть ли какие-нибудь функций на Delphi для нахождения последнего дня месяца, т.е. узнать сколько дней в месяце. Пример, Февраль 28(29) дней, Январь 31 и т.д.


 
kukuikar ©   (2004-09-20 09:14) [1]

нет.
пишик код, определяй какой месяц, и соответсвенно указывай последний день. незабудь реализовать проверку на высокосный год, где в феврале 29 дней.
удачи.


 
TUser ©   (2004-09-20 09:17) [2]

Можно использовать DaysBetween и указать первое число данного месяца и первое число следующего.


 
Warlord   (2004-09-20 09:28) [3]

EndOfTheMonth()


 
Skyle ©   (2004-09-20 09:35) [4]


> Как найти последний день месяца?

Первый день следующего месяца минус 1.


 
JetMan   (2004-09-20 09:39) [5]

Спасибо!!!


 
mike-d ©   (2004-09-20 10:19) [6]

Еще вариант (из модуля SysUtils)

function IsLeapYear(Year: Word): Boolean;

{ The MonthDays array can be used to quickly find the number of
 days in a month:  MonthDays[IsLeapYear(Y), M]      }

const
 MonthDays: array [Boolean] of TDayTable =
   ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
    (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));


 
ghg ©   (2004-09-20 12:08) [7]

не в каждом високосном году в феврале 29 дней
если я все правильно помню


 
Romkin ©   (2004-09-20 12:12) [8]

ghg ©  (20.09.04 12:08) [7] Ты хотел сказать "Не в каждом четвертом" :)) IsLeapYear точно определяет, високосный год или нет .
Но лучше - первое число нужного месяца, incMonth и вычесть один день. Skyle ©  (20.09.04 09:35) [4]


 
ghg ©   (2004-09-20 12:14) [9]

>Romkin ©   (20.09.04 12:12) [8] ну да это и хотел сказать
поэтому самодельничеством лучше не заниматься а использовать [4] имхо


 
DarkMan   (2004-09-20 12:32) [10]

DaysInMonth


 
kukuikar ©   (2004-09-20 13:13) [11]

Проверку високосного года дай сам!

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;


 
TUser ©   (2004-09-20 13:18) [12]


> Проверку високосного года дай сам!

:)


 
ghg ©   (2004-09-20 13:20) [13]

>kukuikar ©   (20.09.04 13:13) [11]
вопрос как раз в том какой год високосный а какой нет
см.[7,8]


 
kukuikar ©   (2004-09-20 13:21) [14]


> TUser ©   (20.09.04 13:18) [12]
>
> > Проверку високосного года дай сам!
>
> :)

ну а чё, мне еме все написать и скомпилировать может надо?:)


 
Skyle ©   (2004-09-20 13:22) [15]


> вопрос как раз в том какой год високосный а какой нет

IsLeapYear...

Но вот не могу понять, зачем такие извращения...


 
Coven   (2004-09-20 14:12) [16]

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 14:30) [17]


> [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;


 
Vitaly ©   (2004-09-20 14:37) [18]

И какая дата будет:
LastDayOfMonth("12-dec-2004")?


 
SergP.   (2004-09-20 14:37) [19]


>  [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;


 
Skyle ©   (2004-09-20 14:41) [20]


> [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:46) [21]

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;


 
kukuikar ©   (2004-09-20 15:05) [22]


> SergP.   (20.09.04 14:46) [21]

все, мне кажется это логический конец этой дискуссии.


 
Ega23 ©   (2004-09-20 15:08) [23]

RXLib, uses DateUtil, FirstDayOfNextMonth-1.
Если последний день N-го месяца, то
IncMonth((FirstDayOfNextMonth-1),N).


 
art   (2004-09-20 19:55) [24]

Если имеешь 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


 
Fay ©   (2004-09-20 19:59) [25]

2  [24] art   (20.09.04 19:55)
Это что?! Что-то никак понять не могу.


 
Isaev   (2004-09-20 21:52) [26]

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 21:55) [27]

2  [26] Isaev   (20.09.04 21:52)
Год является високосным, если он кратен 4.
... Но если он кратен 100, то он не високосный.
... Но если он кратен 400, то он всё-таки високосный 8)


 
SergP.   (2004-09-21 07:26) [28]


>  [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;



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.037 c
14-1095099827
Jus
2004-09-13 22:23
2004.10.03
Как можно сделать свой комп с ХР "сервером" или как его там?)...


3-1094361702
Гаврилов В.А.
2004-09-05 09:21
2004.10.03
Работа с Microsoft Access


3-1094623708
Junior
2004-09-08 10:08
2004.10.03
AutoInc в таблице Paradox


8-1089126295
Popovich A.
2004-07-06 19:04
2004.10.03
Трансформация BMP в JPG


3-1094302756
Arnold
2004-09-04 16:59
2004.10.03
Как создать свой файл gdb